It seems to me like an anti-pattern to have a time series where the identity is formed by (device,location,firmware version,sensor). It seems to me like (device,location,sensor) is fine identity for an original of, presumably, real-valued time series data, while (device,location,firmware) is a good identity for, I guess, a string-valued time series, and if you really needed to get sensor data aggregated by firmware version you'd do a join in this rare and in my opinion highly contrived case.