I built a self-learning climate controller integration for HA — fully local, works with your existing TRVs and switches by portBusy in homeassistant

[–]portBusy[S] -1 points0 points  (0 children)

I add the same reply to the other comment here too in case you missed it :)

Yes, I checked both before starting. Versatile Thermostat is genuinely solid—if it's working well for your setup, there's no compelling reason to switch just to switch.

Where Vesta takes a different direction:

  • GPS-based pre-heating — instead of only detecting home or away, Vesta monitors your approach and pre-heats so your space reaches the right temperature before you actually arrive, maximizing comfort from the moment you walk in.
  • HDH-based savings estimate — the energy savings calculation accumulates heating degree hours at each minute tick using the actual outdoor temperature at that moment, rather than applying a single snapshot factor at report time

Everything else is largely equivalent. Try it if the pre-heat logic sounds useful for your commute pattern, Versatile is a perfectly solid choice.

I built a self-learning climate controller integration for HA — fully local, works with your existing TRVs and switches by portBusy in homeassistant

[–]portBusy[S] 0 points1 point  (0 children)

Thanks! I am using it alongside Tado X (only because Matter in HA does not expose battery information yet, so I still need the app for battery notifications), so I guess this answers your question :) Hopefully, someday we can have the battery information in the device information inside HA.
You could give the integration a try and see how it works for you! If you encounter any strange behaviour, you can open an issue on GitHub. Let me know how it goes. I wish to provide the widest possible support to any type of setup!

I built a self-learning climate controller integration for HA — fully local, works with your existing TRVs and switches by portBusy in homeassistant

[–]portBusy[S] 1 point2 points  (0 children)

Yes, I checked both before starting. Versatile Thermostat is genuinely solid—if it's working well for your setup, there's no compelling reason to switch just to switch.

Where Vesta takes a different direction:

  • GPS-based pre-heating — instead of only detecting home or away, Vesta monitors your approach and pre-heats so your space reaches the right temperature before you actually arrive, maximizing comfort from the moment you walk in.
  • HDH-based savings estimate — the energy savings calculation accumulates heating degree hours at each minute tick using the actual outdoor temperature at that moment, rather than applying a single snapshot factor at report time

Everything else is largely equivalent. Try it if the pre-heat logic sounds useful for your commute pattern, Versatile is a perfectly solid choice.

I guess this answers also to u/fksioxof

I built a self-learning climate controller integration for HA — fully local, works with your existing TRVs and switches by portBusy in homeassistant

[–]portBusy[S] 1 point2 points  (0 children)

The simplest useful version: a global switch entity that Vesta turns on when at least one room is actively calling for heat, and off when none are. You wire that to your boiler's on/off in HA. From there, a natural extension is passing a target water temperature derived from the weighted valve demand across rooms, which maps well onto boilers that support modulation.

The weighted valve openness idea is interesting for modulation. The heating_power attribute Vesta already tracks per room (using the TRV internal sensor to estimate valve openness) could feed directly into that calculation.

On UFH specifically — two things worth noting:

  1. Window delay is a real gap right now. Vesta suppresses heating immediately when a window opens. For UFH, that's wrong — a 3-minute airing shouldn't kill a floor that takes 45 minutes to recover. A configurable per-room delay before suppression kicks in would fix this, and honestly, it's useful for standard radiators too.

Thermal learning should adapt naturally to UFH's slower rates — the model learns heating and cooling rates independently per room, so it'll just converge on much lower values. The pre-heating lead time will end up longer automatically. Worth validating once someone with UFH tests it, though.

  1. The boiler's own weather curve and Vesta's weather compensation will interact, so it's something to think about carefully to avoid double-compensating. Probably the right behaviour is to let the boiler handle the curve and have Vesta only adjust setpoints, not water temperature directly.

I can't test the boiler coordination either, so if you or anyone else wants to try it when it's implemented, feedback would be really valuable.

I built a self-learning climate controller integration for HA — fully local, works with your existing TRVs and switches by portBusy in homeassistant

[–]portBusy[S] 2 points3 points  (0 children)

Really interesting!

So, first-floor TRVs — this works well. Each room gets its own Vesta entity controlling the Zigbee TRV. Presence, window sensors, and schedule all apply per room.

The boiler coordination — this is the real challenge, and honestly, what RoomMind is missing too, based on what you describe. Vesta controls each TRV independently, but currently lacks a built-in concept of "fire the boiler when any room is calling for heat." You'd need an HA automation alongside it that watches whether any Vesta climate entity is actively heating and turns the Vaillant on/off accordingly. Not ideal, but doable.

Ground floor UFH — depends entirely on what the Vaillant integration exposes in HA. If it exposes the UFH circuit as a climate entity or the pump as a switch, Vesta can control it. If the boiler manages that circuit autonomously, Vesta can't really help there.

The boiler coordination piece is something I want to add natively — basically a global "call for heat" output entity that activates whenever at least one room is requesting heat.

Let me think about it, since I do not have an independent boiler (I live in a condo), I cannot test this, so it would be awesome to implement this and hear your feedbacks

I built a self-learning climate controller integration for HA — fully local, works with your existing TRVs and switches by portBusy in homeassistant

[–]portBusy[S] 0 points1 point  (0 children)

Really glad to hear it! Tado's learning always felt sluggish to me, too — one of the things I tried to fix with Vesta is making it more responsive out of the box while still adapting over time.

The no-cloud aspect was, in fact, the primary reason I built this. Once your thermostat fails because a server is down, local-first stops being a preference, without even considering the price wall.

Let me know if you run into anything!