I landed here after also being blocked by this design choice, and not finding a good solution after some months.
Probably because input_booleans do not directly control things like switches do.
Why does the Generic Thermostat care whether it’s controlling something at all? It’s my job to make it control something, not its job to make sure I’ve connected it the way it envisioned I should want to.
And the generic thermostat is used to control something physical.
I’m holding in my hands right now an actual, physical, commercially available, off-the-retail-shelf thermostat. It’s not connected to anything but a pair of AA batteries. No wires in the back. It is happily letting me set temperatures, changing its LCD based on whether it would cool at the moment, and toggling an entirely disconnected relay. I could connect that relay to anything, from my HVAC unit as intended, to the ‘ON’ switch of a clapping-cymbals monkey toy so I at least get entertainment when it gets hot. The real physical thermostat does not care in the least what I do with those wires.
Why is this physical, retail-sold, dumb thermostat, more flexible than Home Assistant’s virtual thermostat?
I could (and have) told Home Assistant’s ‘Generic Thermostat’ to control a lamp in my room, and it was fine with that. So it doesn’t care what the physical switch does, only that’s it’s a physical switch?
I could tell it to control an empty smart outlet with nothing plugged in. So it doesn’t care if the physical switch does anything, only that it’s physical? (Heck this wouldn’t be a bad ‘hack’ for this issue, just $15 per virtual thermostat.)
I could program an ESP32 to pretend to have a switch that only exists as a YAML config. Having no wires connected, you could easily argue those are “virtual”, but the ‘Generic Thermostat’ would happily allow them just because they look like a device.
So it’s not even about the switch being virtual or real. It’s purely a matter of the ‘Input Boolean’ being categorized differently than a device, and the field not filling from that category. There is no other substance whatsoever to the design choice of forcing the ‘Generic Thermostat’ to have a non-empty target that must be a device, or there would be some problem with one of the above.
Probably because input_booleans do not directly control things like switches do. And the generic thermostat is used to control something physical.
Showing that this has no basis in the functionality of the thermostat. It’s 100% just artificially imposed rules toward someone’s mental image of how a thermostat “should be used”. Home Assistant should design for flexibility. Especially for its virtual devices.
Anyone who wants their virtual thermostat to directly control a physical device is guaranteed going to put a physical device in that target slot. Nobody needs to worry about those people doing that.
But, there is nothing about the concept of a virtual thermostat that cannot operate if that target slot goes to something else, controls something indirectly, or even is empty and only shows someone what the thermostat would be doing on their test dashboard. “I would be cooling right now” is still useful in automations even if that specific entity isn’t directly in charge of said cooling.
In fact I could implement what I want, in Home Assistant, right now, by purchasing physical thermostats that only connect to power and nothing else. Pair them all with HA, and simply because they are not this virtual Helper thermostat, I would be able to use their cooling-or-not state in further logic in a way that I’m blocked from doing with the virtual thermostat.
I implore the Home Assistant team, please don’t impose artificial limiting rules on our logic legos!