Ok, I’ve read some long threads about it such as:
But I wanted to create another one on new ideas about how to implement extra capabilities.
I will try to give concrete examples in order to be clear for everybody. I will use the examples of the existing thermostat capabilities because I know these capabilities very well (i.e., My custom ecobee device type).
Another reason for using the existing thermostat capabilities as example is that this set is the most detailed and decomposed of all the device types out there (why? unknown).
First, to set the context, do we consider the existing thermostat capabilities a minimum set of characteristics and methods that each thermostat must implement?
Looking at the capability taxonomy right now, yes, it does look as the existing capabilities are the minimum set that a thermostat device type must implement.
For a thermostat device type developer, it means creating a bunch of capabilities ( you may forget one as ST restructures them as they did in the past).
On top of it, all these capabilities are in fact a set of the lowest common denominator for all thermostats out there.
Z-wave thermostats (such as the CT30, CT100) and wi-fi thermostats (such as ecobee, Next, Honewell Lyric, and even the Honeywell Smart Wi-Fi thermostat) are totally different breeds of thermostats.
Z-wave thermostats are just plain dumb: they don’t have any scheduling capabilities as soon as you connect them to a hub.
One cannot create any ‘hold’ events (such as ‘away’ or ‘present’ and even custom ones) at z-wave thermostats, and ‘resume’ their normal scheduled programs once this event is over.
For example, based on the ecobee thermostat, I created a smartapp that can create ‘away’ hold events when all presence sensors are gone, and ‘resume’ the normal scheduling when one presence is back home. Another smartapp that I created does a similar logic, but based on indoor motion sensors. Sadly, the smartapps that I created are specific to ecobee, and there is no way for me (at the moment) to generalize them for other smart thermostats out there (i.e., for the Nest or Lyric).
So, what do we do for the ‘smart’ thermostats?
a) Do we add another set of ‘regular’ capabilities such as ‘capability.thermostatSetHold’ and ‘capability.thermostatResumeProgram’ only valid for smart thermostats?
Z-wave thermostats then won’t be able to implement them, so that goes against everything that has been done so far in ST.
b) Do we create a brand new set of ‘optional’ capabilities for the smart thermostats?
And, how to generalize these optional capabilities given the fact that each smart thermostat has
a different way to create hold events and resume them (with different attributes potentially)?
My thoughts are the following: if we can find a way to create metacode templates (with generic commands such as setHold & resumeProgram) which could be customized by each smart thermostat device type into their real implementation (using their own attributes), then we’d be able to achieve a higher level of reuse.
I’d like to exchange ideas about how to create metacode, but I’d like to know if it’s something ST developers are interested in or it’s just me (b/c of my SW architecture background)…