update available…
Log below from 2.4.7.. I do not immediately see the startup logging sequence..
Thanks again!
{
“_report”: “Ultimate EMS Bug Report”,
“_version”: “2.4.7”,
“_generatedAt”: “2026-09-04T09:02:20.205Z”,
“settings”: {
“phases”: 3,
“max_amps”: 25,
“contract_type”: “dynamic”,
“price_source”: “device”,
“price_device_id”: “a9493b53-4865-4f69-b468-bb2063e6ae05”,
“zero_import”: false,
“pv_peak_kw_l1”: 1.68,
“pv_peak_kw_l2”: 1.68,
“pv_peak_kw_l3”: 1.68,
“pv_l1_peak_hour”: 13,
“pv_l2_peak_hour”: 13,
“pv_l3_peak_hour”: 13,
“gridMeterId”: “1be3884f-110f-4d40-b3ae-2e2192b64e28”,
“pvMeterIds”: [
“c7025a26-f7ea-4224-99af-4591d6a2d986”
],
“pvMeterPhases”: [
0
],
“hasBattery”: true,
“batteries”: [
{
“id”: “35e172c5-db72-4fe8-b0f2-a8cce34785ef”,
“phase”: 0,
“autonomous”: false,
“capacityKwh”: 5,
“maxChargeW”: 2500,
“maxDischargeW”: 2500,
“rte”: 0.8,
“zendureIp”: null,
“zendureSn”: null
}
],
“hasEv”: true,
“evDeviceId”: “59cedc4d-3d19-4971-904b-7a2a8b2fdedc”,
“evChargerId”: “cb9ec881-6f47-413d-b71e-7b2a07cd4b6f”,
“ev_capacity_kwh”: 95,
“ev_min_current_a”: 5,
“ev_charge_mode”: “solar_and_grid”,
“ev_default_soc”: 80,
“ev_solar_ceiling_min_pct”: 50,
“ev_night_charge”: true,
“ev_home_mon”: true,
“ev_home_tue”: true,
“ev_home_wed”: true,
“ev_home_thu”: true,
“ev_home_fri”: true,
“ev_home_sat”: true,
“ev_home_sun”: true,
“hasHeatPump”: false,
“hasEvCharger”: true,
“hasDumpLoad”: false,
“dumpLoadIds”:
},
“devices”: [
{
“id”: “1be3884f-110f-4d40-b3ae-2e2192b64e28”,
“name”: “Solax Modbus Feed-In”,
“driverId”: “homey:app:com.msd.inverter.solax:solax_modbus_feed_in”,
“capabilities”: [
“measure_power”,
“meter_power.imported”,
“meter_power.exported”
],
“values”: {
“measure_power”: 174,
“meter_power.imported”: 4.43,
“meter_power.exported”: 0.98
}
},
{
“id”: “c7025a26-f7ea-4224-99af-4591d6a2d986”,
“name”: “Solax Inverter”,
“driverId”: “homey:app:com.msd.inverter.solax:solax_modbus_g4”,
“capabilities”: [
“onoff”,
“calculate_self_consumed_today”,
“calculate_self_consumed_year”,
“calculate_self_sufficiency_today”,
“calculate_self_sufficiency_year”,
“measure_load”,
“measure_feed_in”,
“measure_battery_power”,
“measure_battery_soc”,
“measure_battery_soh”,
“measure_solar_dc_1”,
“measure_solar_dc_2”,
“status_inverter_use_mode”,
“status_inverter_run_mode”,
“status_inverter_manual_mode”,
“status_inverter_state_lock”,
“status_inverter_fault”,
“measure_battery”,
“measure_export_limit”,
“measure_generation_total”,
“measure_temperature_battery”,
“measure_temperature_inverter”,
“meter_power.discharged”,
“meter_power.charged”,
“meter_feed_in_export_today”,
“meter_feed_in_import_today”,
“measure_power”,
“meter_power”,
“measure_solar_potential”,
“measure_solar_clipping_loss”,
“status_solar_clipping”,
“meter_solar_clipping_today”,
“button.unlock”,
“button.unlock_advanced”,
“measure_battery_voltage”,
“status_inverter_available_mode”
],
“values”: {
“onoff”: true,
“calculate_self_consumed_today”: 82,
“calculate_self_consumed_year”: 77,
“calculate_self_sufficiency_today”: 22,
“calculate_self_sufficiency_year”: 50,
“measure_load”: 553,
“measure_feed_in”: -174,
“measure_battery_power”: 81,
“measure_battery_soc”: 10,
“measure_battery_soh”: 91,
“measure_solar_dc_1”: 200,
“measure_solar_dc_2”: 243,
“status_inverter_use_mode”: “Self-Use”,
“status_inverter_run_mode”: “Normal”,
“status_inverter_manual_mode”: “Stop charge&discharge”,
“status_inverter_state_lock”: “Unlocked”,
“status_inverter_fault”: “OK”,
“measure_battery”: 10,
“measure_export_limit”: 300000,
“measure_generation_total”: null,
“measure_temperature_battery”: 22,
“measure_temperature_inverter”: 33,
“meter_power.discharged”: 0.4,
“meter_power.charged”: 0.3,
“meter_feed_in_export_today”: 1,
“meter_feed_in_import_today”: 4.4,
“measure_power”: 434,
“meter_power”: 1,
“measure_solar_potential”: 2908,
“measure_solar_clipping_loss”: 2474,
“status_solar_clipping”: false,
“meter_solar_clipping_today”: 11.13,
“button.unlock”: null,
“button.unlock_advanced”: null,
“measure_battery_voltage”: 203.2,
“status_inverter_available_mode”: “Awake”
}
},
{
“id”: “35e172c5-db72-4fe8-b0f2-a8cce34785ef”,
“name”: “Solax Modbus Battery”,
“driverId”: “homey:app:com.msd.inverter.solax:solax_modbus_battery”,
“capabilities”: [
“measure_power”,
“measure_battery”,
“meter_power.discharged”,
“meter_power.charged”
],
“values”: {
“measure_power”: 81,
“measure_battery”: 10,
“meter_power.discharged”: 0.4,
“meter_power.charged”: 0.3
}
},
{
“id”: “59cedc4d-3d19-4971-904b-7a2a8b2fdedc”,
“name”: “Sorte”,
“driverId”: “homey:app:com.tesla.car:car”,
“capabilities”: [
“measure_battery”,
“device_state_insights”,
“ev_charging_state”,
“last_update”,
“car_state”,
“meter_car_odo”,
“car_software_version”,
“car_software_update_version”,
“car_software_update_state”,
“car_shift_state”,
“measure_car_drive_speed”,
“measure_car_tpms_pressure_fl”,
“measure_car_tpms_pressure_fr”,
“measure_car_tpms_pressure_rl”,
“measure_car_tpms_pressure_rr”,
“car_refresh”,
“car_wake_up”,
“car_doors_locked”,
“car_sentry_mode”,
“car_trunk_rear”,
“car_trunk_front”,
“alarm_api_error”,
“api_error”,
“car_user_present”,
“measure_api_request_count”,
“measure_api_command_count”,
“measure_api_command_wakes_count”,
“measure_api_costs”,
“measure_api_ble_success_count”,
“measure_api_ble_error_count”,
“measure_powertrain_inverter_temp_f”,
“measure_powertrain_inverter_temp_r”,
“measure_powertrain_stator_temp_f”,
“measure_powertrain_stator_temp_r”,
“measure_powertrain_inverter_voltage_f”,
“measure_powertrain_inverter_voltage_r”,
“measure_powertrain_inverter_current_f”,
“measure_powertrain_inverter_current_r”,
“measure_powertrain_inverter_power_f”,
“measure_powertrain_inverter_power_r”,
“last_online”
],
“values”: {
“measure_battery”: 28,
“device_state_insights”: false,
“ev_charging_state”: “plugged_out”,
“last_update”: “04.09.2026 10.57”,
“car_state”: “offline”,
“meter_car_odo”: 155816.77,
“car_software_version”: “2026.26.6.1”,
“car_software_update_version”: " ",
“car_software_update_state”: “”,
“car_shift_state”: “P”,
“measure_car_drive_speed”: 0,
“measure_car_tpms_pressure_fl”: 2.83,
“measure_car_tpms_pressure_fr”: 2.85,
“measure_car_tpms_pressure_rl”: 2.8,
“measure_car_tpms_pressure_rr”: 2.8,
“car_refresh”: null,
“car_wake_up”: null,
“car_doors_locked”: false,
“car_sentry_mode”: false,
“car_trunk_rear”: false,
“car_trunk_front”: false,
“alarm_api_error”: false,
“api_error”: null,
“car_user_present”: false,
“measure_api_request_count”: 503,
“measure_api_command_count”: 0,
“measure_api_command_wakes_count”: 0,
“measure_api_costs”: 1.01,
“measure_api_ble_success_count”: 0,
“measure_api_ble_error_count”: 0,
“measure_powertrain_inverter_temp_f”: null,
“measure_powertrain_inverter_temp_r”: null,
“measure_powertrain_stator_temp_f”: null,
“measure_powertrain_stator_temp_r”: null,
“measure_powertrain_inverter_voltage_f”: null,
“measure_powertrain_inverter_voltage_r”: null,
“measure_powertrain_inverter_current_f”: null,
“measure_powertrain_inverter_current_r”: null,
“measure_powertrain_inverter_power_f”: null,
“measure_powertrain_inverter_power_r”: null,
“last_online”: “03.09.2026 15.04”
}
},
{
“id”: “cb9ec881-6f47-413d-b71e-7b2a07cd4b6f”,
“name”: “SolaX EV Charger”,
“driverId”: “homey:app:com.msd.inverter.solax:solax_ev_charger_g2_local”,
“capabilities”: [
“onoff”,
“solax_evc_mode”,
“solax_evc_state”,
“measure_power”,
“meter_power”,
“meter_power_session”,
“measure_voltage”,
“measure_current”,
“solax_evc_current_limit”,
“solax_evc_start_mode”,
“solax_evc_eco_limit”,
“solax_evc_green_limit”
],
“values”: {
“onoff”: true,
“solax_evc_mode”: “FAST”,
“solax_evc_state”: “Preparing”,
“measure_power”: 1,
“meter_power”: 72305869,
“meter_power_session”: 0,
“measure_voltage”: 228.19,
“measure_current”: 0,
“solax_evc_current_limit”: 16,
“solax_evc_start_mode”: “Plug & Play”,
“solax_evc_eco_limit”: “1”,
“solax_evc_green_limit”: “1”
}
},
{
“id”: “a9493b53-4865-4f69-b468-bb2063e6ae05”,
“name”: “DK_Denmark_1”,
“driverId”: “homey:app:com.gruijter.powerhour:dap15”,
“capabilities”: [
“meter_price_h0”,
“meter_price_h0_export”,
“meter_price_m15”,
“meter_price_m30”,
“meter_price_m45”,
“meter_price_h1”,
“meter_price_h2”,
“meter_price_h3”,
“meter_price_last_month_avg”,
“meter_price_this_month_avg”,
“meter_price_this_day_avg”,
“meter_price_next_8h_avg”,
“meter_price_next_8h_lowest”,
“hour_next_8h_lowest”,
“meter_price_this_day_lowest”,
“hour_this_day_lowest”,
“meter_price_this_day_highest”,
“hour_this_day_highest”,
“meter_price_next_8h_highest”,
“hour_next_8h_highest”,
“meter_price_next_day_lowest”,
“hour_next_day_lowest”,
“meter_price_next_day_highest”,
“hour_next_day_highest”,
“meter_price_next_day_avg”,
“meter_rank_price_h0_this_day”,
“meter_rank_price_h0_next_8h”
],
“values”: {
“meter_price_h0”: 0.0762,
“meter_price_h0_export”: 0.0762,
“meter_price_m15”: 0.0838,
“meter_price_m30”: 0.0709,
“meter_price_m45”: 0.0635,
“meter_price_h1”: 0.0693,
“meter_price_h2”: 0.055,
“meter_price_h3”: 0.0565,
“meter_price_last_month_avg”: 0.1403,
“meter_price_this_month_avg”: 0.133,
“meter_price_this_day_avg”: 0.103,
“meter_price_next_8h_avg”: 0.0644,
“meter_price_next_8h_lowest”: 0.039,
“hour_next_8h_lowest”: 17,
“meter_price_this_day_lowest”: 0.039,
“hour_this_day_lowest”: 17,
“meter_price_this_day_highest”: 0.1689,
“hour_this_day_highest”: 7,
“meter_price_next_8h_highest”: 0.1224,
“hour_next_8h_highest”: 18.75,
“meter_price_next_day_lowest”: null,
“hour_next_day_lowest”: null,
“meter_price_next_day_highest”: null,
“hour_next_day_highest”: null,
“meter_price_next_day_avg”: null,
“meter_rank_price_h0_this_day”: 29,
“meter_rank_price_h0_next_8h”: 27
}
}
],
“liveState”: {
“ready”: false
},
“pvCurtailment”: {
“pvW”: null,
“pvExpectedW”: null,
“pvCurtailing”: null,
“ratio”: null,
“gridW”: null,
“netW”: null,
“gridPhases”: null,
“pvPhases”: null
},
“planSummary”: null,
“planDetails”: {
“today”: null,
“tomorrow”: null
},
“planError”: “EMS is nog aan het opstarten (weerservice nog niet geïnitialiseerd) — probeer het over ongeveer 15 seconden opnieuw.”,
“evController”: null,
“priceSlot”: {
“price”: 0.07623999999999999,
“isCheap”: false,
“isExpensive”: false,
“avg”: 0.15927,
“rank”: 29
},
“battery”: {
“type”: “BatteryAdapter”,
“isAutonomous”: false,
“count”: 0,
“ids”: ,
“capacities”: ,
“maxChargeW”:
},
“thermostat”: null,
“config”: null,
“dashboardSync”: {
“connected”: true,
“lastSuccessAt”: “2026-09-04T09:02:01.469Z”,
“lastError”: null,
“queued”: 0,
“paired”: true
}
}
Switching cars works again.
However there seems to be an issue with the ACE app integration in EMS. The wallbox shows waiting for power (load balancing) while the EMS Widget shows car not connected. The other Homey Alfen app did work properly.
Hi Martijn,
Good to hear switching works again! Found the cause for the Alfen ACE thing: your charger reports different status fields than the ones we currently check for “car connected” — that’s why the official Alfen app worked and this one doesn’t.
Can you send me a fresh bug report while it’s showing “waiting for power”? Settings page, buttons at the bottom, or just DM it. Then I can see the actual values and fix it properly instead of guessing.
Thanks for testing, really helps!
Anders,
Did you also add a new device in your homey “Ultimate EMS” I think you forgot to add this “device”…
can you check?
What happens when you set a charge plan for your EV but the SOC isn’t reached on time? For example, every sunday my electricity is ‘free’ from 11:00 till 16:00. So I want to set a charge plan for my car to reach 100% at 16:00. Most of the time this isn’t possible in this timeframe, but I want to get as much out of this timeframe as possible. When 16:00 is passed I send a flowcard to change the charging to ‘sun+net’. Is there a better way to do this? I don’t have a dynamic price for my energy.
Hi Menno - you were absolutely right. Thanks a lot! Certainly it calculates the plan now. I still haven’t got it to start the solax EV charger - but admittedly that could easily be me (again..). Will try to see if I get it to behave..
Thanks!
Anders
Hi Arne,
Ok so if the EV is mostly gone during daytime and office hours it’s not a problem for the EMS when or arrives at home early. The EMS sees this and will charge with solar or cheap hours to get the maximum out of it. It will recalculate the plan upon connecting the car to the charger. So in theory no need to set a plan for this.
The reason there is a “is home the next day” function is to prevent night charging and again, get the maximum out of your cheap hours or solar production (which is mostly the same expect when there is wind).
For my understanding, you say after 1600 you set the EMS to sun+net, what was the set status before this?
Second question, you have a fixed contract, so how come do you have free energy until 1600?
There are now 3 settings you can play with, The first one is your default Charge target, this is the level that you feel comfortable with charging your EV to. To preserve the battery most people charge it daily up to 60 to 80% because there is no need to charge to 100 if you don’t need it and you battery last longer. So this your daily charge target.
The second one is the minimum charge level, this determines what the minimum level of battery you always won’t to charge to, so let’s say you come home after long day and the battery is at <10% charge, if the min charge level is set to let’s say 20% then the EMS will charge the battery to 20% no matter what. This enables you to have some power in the battery if you have to do a small drive in the evening. If you do not want to use this then set it to 0. You can also use this as an override if you want to force charging.
The third one is the Solar target, this the extra buffer to put in your EV. Let’s say your EV has charged to 60% during the night or whatever, but it is on the driveway and the sun is shining and you have an overcapacity of solar. then the EMS will decide to use this energy and put it in your EV op the level you select here. So I have 60% as my default charge target, min level is 20% and solar targets is 75%
For me this works perfectly.
Last one is the trip planner, If you need to drive for a long time tomorrow or at night, just tell the EMS the departure time and the desired State Of Charge and it makes sure you leave with a full battery.
My energy supplier makes the energy ‘free’ on sunday afternoon during the sunny months to push custommers to use energy when it is good value for them. A little bit like a dynamic contract, but, well yeah, not dynamic. ![]()
I put the EMS to ‘off’ on saturday to keep the charge of the car low, so I can use the maximum of the free period on sunday. Then at 1100, when the free period starts, I set the trip planner to 100% on 1600. And when the time is 1600 I set the EMS to sun+net. But I’m not sure what happens to the trip planner at that point. It most likely didn’t get to the 100%, but it’s 1600. So will it continue charging? Or will it go to the normal EMS setting after 1600?
Another quenstion. Is there a way to use the status of the charger to determine if the car is plugged in? For me this is a way more reliable method than to wait for the car to update. But maybe there’s a problem because at that point, the SOC of the car isn’t up to date also. But close enough to start charging already? Especially when there’s sun, or the prices are cheap.
Hey Arne,
Good questions — here’s how it actually works under the hood right now.
Trip planner after 1600: A trip doesn’t expire exactly at the departure time — it stays active for 1 extra hour after it (a built-in grace period). And as long as a trip is active, it overrides whatever charging mode you’re in: starting 2 hours before departure, the EMS automatically switches to full-speed charging if it calculates you won’t reach your target in time, regardless of the mode setting. So in your case: if the car isn’t at 100% by 1600, the EMS will keep charging at full speed — including from the grid, not just solar — until either it hits 100%, or until 1700 (when the trip finally expires). Switching to “sun+net” at 1600 won’t actually take effect until one of those two things happens, because the still-active trip takes priority over your manual mode change.
That’s worth knowing given your setup: if the free window ends at 1600, the EMS could keep pulling (now no-longer-free) grid power for up to an hour past that, purely because the deadline is technically still “open.” If you want the mode switch at 1600 to take effect immediately, cancel the trip at the same time you switch to sun+net — that removes the override and the EMS falls straight back to the mode you just set.
Charger status for presence detection: this already exists, and it’s already the preferred method — the charger device (not the car) is treated as the more reliable signal. It checks, in order: an explicit “vehicle connected” capability, pilot voltage on the charging cable, known charger status text, and only as a last resort, actual power flowing. And yes — this already kicks in before the car’s own SoC is fresh: once the charger says “connected,” the EMS starts evaluating charging decisions right away, treating an unknown SoC as 0% (safer than assuming it’s full) rather than waiting for the car to wake up and report. So in sunny or cheap-price windows, it can already start pulling power the moment the cable is plugged in.
Whether that’s already working for you depends on what charger (brand/app) you’re using — it needs to expose at least one of those signals. Let me know which charger you have and I can confirm whether it’s fully wired up or needs a small addition.
What would be the best way to cancel the trip? I was looking at a flow, but don’t see a card that would do that. Other option would be to set the trip at 15:00. But maybe that would switch to fast charging when it’s not necessary yet.
I have a Wallbox Pulsar for charger.
and you also have a home battery? so charging this is also desired in this situation?
I will make a special flow that allows you to override the planner and force charging (with load balancer function working) to x% and and when this soc is reached then it will cancel the flow or when the stop flow is triggered. I think this is what you need right?
Ultimate EMS 2.5.1
- New: two Flow actions to temporarily boost EV charging without touching your normal target SoC — “Charge EV to % now” and “Stop extra EV charging” (also stops automatically once the % is reached).
- New: “Heating element (on/off)” device type for simple on/off heaters behind their own thermostat (e.g. a bathroom heater).
- Fixed: air conditioners could be nudged the wrong way (heating instead of cooling or vice versa) when the EMS forecast didn’t match the actual mode — now follows the device’s own live mode.
- Fixed: whether the Alfen ACE’s built-in solar mode got switched off is now visible in the app’s own EMS log, not just Homey’s developer log.
- Added devices: 17 more device types recognized (incl. a Volttime charger, Zendure SolarFlow, and several thermostat apps).
Dag Marco,
Heb jij ook het EMS apparaat geïnstalleerd? Dat is vaak nog een stap die wordt overgeslagen.
Dus na installeren van de app moet je eerst:
- een apparaat toevoegen (EMS Controller) en dan zal ie ook met een wizard komen om wat basis apparaten te selecteren zoals P1, inverter etc.
- daarna kan je in de instellingen van de app (en dus niet van het “apparaat”) helemaal los op de overigen instellingen en ook koppelen aan ultimate-ems.com onder andere (dat is optioneel overigens maar helpt mij wel om sneller apparaten te ondersteunen).
Laat even weten of het gelukt is.
Beste Rob,
Ik heb dit voor je uitgezocht in de logs. Geen storing: rond 13:49 (lokale tijd) startte de EMS gewoon met laden, maar binnen een minuut greep de load balancer in omdat fase L1 op dat moment nog maar 663W ruimte had tegen de veiligheidsgrens — er trok iets anders fors op die fase. Daarop pauzeert de EMS automatisch 30 minuten en probeert het daarna zelf weer, dus dat lost zichzelf op zodra er weer ruimte is.
Los daarvan: jouw SolarEdge-laadpaal kan door Homey alleen aan/uit gezet worden, niet in laadstroom bijgestuurd — dat mist een koppeling in de SolarEdge-Homey-app. Daardoor laadt hij, eenmaal aan, op de stroom die je zelf in de SolarEdge-portal hebt ingesteld, in plaats van fijn mee te schalen met je zonoverschot zoals bij merken die dat wel ondersteunen. Wil je dat de EMS de laadstroom wél kan bijsturen op zonoverschot? Dan kan dat via een kleine Homey Flow die je zelf aanmaakt: trigger “Wanneer EMS de laadstroom wil instellen” (van Ultimate EMS) → actie “Stel laadstroom in” (van je SolarEdge-laadpaal). Zonder die Flow werkt alleen start/stop, niet de snelheid.
Laat het weten als je hier hulp bij wilt!
Gr, Menno
Hoi Menno, veel dank
Ik zie bij de solaredge laadpaal alleen de actie start laden en stop laden, maar geen “stel laadstroom in”. Dus als jij een omweg weet, graag. Gr rob

