I just recently moved into a new home. As the paint is starting to dry, I’ve started pondering the best way to go about setting up my new smart home. Unlike some people on here who are building from scratch, I largely have to work within the confines of what I’ve been given. However, I’m comfortable with electric work and plan on doing some remodeling anyways so I might coordinate running Cat6 along with new electrical cable to certain areas of my house.
I want to be intentional about good design choices as I build my openHAB installation, as I noted in the last house that I rarely fixed things once they were functional, even if they could be done in a much better way.
Coinciding with the move is a change to a new server setup. I used to run a two RPi3 setup - one Pi was setup with openHABian and served openHAB, Frontail, and NodeRed. A second RPi3 served Logitech Media Server and a Squeezebox along with Mosquitto. I decided to merge these systems to one Ubuntu based Docker setup. I’m also configuring Shinobi to run on this box. Using Docker is a bit of a learning curve though I have Frontail and openHAB running smoothly. Shinobi running (barely so far), and I’m planning to add Mosquitto, Grafana, NodeRed, and Logitech Media Server/Squeezebox.
I want to create a much better logical name system. Inspired in part by @rlkoshak, here’s part of my new groups items file:
/* Room Groups */
Group G_ENOR "North Exterior"
Group G_EWES "West Exterior"
Group G_EEAS "East Exterior"
Group G_ESOU "South Exterior"
Group G_EPTW "Play Tower"
Group G_EGBX "Garden Box"
Group G_EROF "Roof"
Group G_1UTI "Utility"
Group G_1OFC "Office"
Group G_1STO "Storage"
Group G_1UNA "Unassigned Room"
Group G_2GAR "Garage"
Group G_2COR "Lower Corridor"
Group G_2BR4 "Bedroom 4"
Group G_2BT2 "Bathroom 2"
/* Function groups */
Group G_HVAC "HVAC"
Group G_HVAC_Thermostat "Thermostat"
Group G_HVAC_AtticFan "Attic Fan"
Group G_SFTY_Security
Group G_SFTY_Security_Motion
Group G_SFTY_Security_Contact
Group G_SFTY_Security_Contact_Interior
Group G_SFTY_Security_Contact_Exterior
/* model items */
Switch V_3SUN_ZW_Motion "Motion [MAP(motion.map):%s]" <motiona> (G_3SUN, G_SFTY_Security_Motion, G_HIST)
Number V_3SUN_ZW_Temp "Temperature [%.1f °F]" <temperature> (G_3SUN, G_ENVS_Temp)
Number V_3SUN_ZW_Humidity "Humidity [%.0f %%]" <humidity> (G_3SUN, G_ENVS_Humidity)
Number V_3SUN_ZW_Luminance "Luminance [%.0f Lux]" <dimmablelight> (G_3SUN, G_ENVS_Luminance)
Number V_3SUN_ZW_UV "UV" <sun> (G_3SUN, G_ENVS_UV)
Number V_3SUN_ZW_Battery "Aeon Multi Battery [%s %%]" <battery> (G_3SUN, G_DIAG_Batt)
Switch A_2COR_PH_Switch "Bloom Lamp" (G_2COR, G_FUNC_Lights)
Dimmer A_2COR_PH_Dimmer "Bloom Dimmer" (G_2COR, G_FUNC_Lights)
Color A_2COR_PH_Color "Bloom Color" <rgb> (G_2COR)
Dimmer A_2COR_PH_ColorTemp "Bloom Color Temperature" (G_2COR)
String A_2COR_PH_Alert "Bloom Alert" <alarm> (G_2COR)
Switch A_2COR_PH_Effect "Bloom Effect" <colorwheel> (G_2COR)
The idea behind my naming convention is that I can find it using VSCode’s autocomplete feature by location (ex. 2GAR), by function (SFTY for Safety, HVAC, etc.), or by connection (ZW, NS, MQ, etc.).
One question I have for the community - when deciding how to name your .items files, how do you separate them out? I used to use a separate file for each connection method or binding (i.e. mqtt.items, zwave.items, nest.items, etc.), but am considering both location (2BR4.items) and function (HVAC.items) and am curious if anyone else follows those conventions.
Starting over is a lot of work but I think the results will be worth it!