I have been watching this conversation evolve, and feel like I need to weigh in to the debate.
I am a long time HA user, but have not been active in the forums, nor do I have a huge install. I have moved house a couple of times over the course of my use of HA and taken the opportunity to “start over” each time (always using the old configuration as a starting point for the new install). I have occasionally rebuilt my deployment from scratch using my YAML configuration. This would be tedious to say the least if I was forced to do this with a GUI only approach. In fact, the current on-boarding workflow always seems to ignore my YAML core configuration, or at least it is confusing as to which data is actually used in the end. With that said, I have gotten much pleasure and joy in using HA, and I do appreciate all the contributions of so many people.
A couple of points about this debate, even if some of this has been hashed to the max already:
-
GUI and textual configuration approaches address different use cases (with some overlap in the VENN diagram for sure). Neither approach addresses all use cases nor would I posit that one approach is better than the other. They just address different users and use cases, all of which are valid.
-
Arguing about whether one approach is better than the other approach isn’t useful IMHO. Both approaches are valid. They just address different users and use cases. Different approaches “scale” along different axes. It would be fantastic if everyone could agree on this point!
-
Arguments that one can do task “x” with one approach doesn’t mean it is convenient or practical in that approach.
For example: when sharing config, just document the integrations that you use with comments rather than including the integration config itself; or that new users just need to learn YAML; or just copy the unknowable, undocumented black box of .storage
around if you want to backup or replicate your install. Of course if one tries hard enough, you can do task “x”.
IMHO that argument just doesn’t hold much water when considering abandoning a more convenient and practical alternative method, its simply trying to justify the approach already taken without considering how best to solve a given use case.
-
Arguing that YAML should be abandoned because changes require a restart is a deficiency of the implementation, not the approach. The correct solution is to fix the implementation.
The argument that integration developers shouldn’t be burdened with supporting both a GUI and YAML configuration implementation I believe comes from a fundamentally incorrect design assumption. Integration developers should not be presented with the choice of implementing a GUI, YAML, or both approach. I believe that it is an invalid choice to begin with (and I certainly understand the historical path that lead things to this point). Instead, consider:
Integration developers should declare WHAT data is required and not be concerned with HOW that data is obtained.
Taking a different design approach will:
-
Free the integration developer from having to support multiple configuration approaches.
-
Follows in the spirit of the tried and true “separation of concerns” design pattern. Integrations “integrate” and no more. How the configuration data is obtained should not be the concern of an integration.
-
Future proofs the current and on-going investment in new and existing integrations.
-
Allows different configuration “authoring” mechanisms supporting different use cases to be supported by the platform, not individual integrations.
-
Data validation becomes the responsibility of the platform based upon the declaration of what the integration requires.
-
Allows future experimentation with different configuration “authoring” approaches for different use cases.
In fact, this very approach was suggested in the discussion of ADR-0007.
So, I am curious. Is it possible to support a stand alone, text based, unattended configuration mechanism using “config flows”? Are “config flows” inexorably tied to interactive, GUI based approaches? I ask since I have not yet deeply explored what “config flows” are actually capable of. Enlighten me and others please.
I think that numerous use cases supporting a GUI or textual configuration approach are well documented in this forum. I am sure there are other use cases that will come to light in the future. It seems to me that NOW is the time to reconsider this approach, and thus the spirited discussion taking place here.
By making YAML an opt-in choice for integration developers, it effectively locks in the “config flow” (GUI?) approach for the long term and potentially cripples numerous other valid use cases. I don’t think it is unreasonable to assume that YAML configuration will slowly become obsolete. As more and more integrations support the “config flow” (GUI) approach, it will become impossible, given the effort involved, to change course again and support any other approach, however valid, in the future. Alas, me thinks that it is already too late to change course, but I hope…