Data Persistence
The project uses two database layers:
- GRDB (
GRDB.swift): newer layer, accessed viaCurrent.database(). Used for Watch config, CarPlay config, widget config, entity registry, panels, etc. When adding a new persistent model, prefer GRDB: implementDatabaseTableProtocol(definestableName,definedColumns, andcreateIfNeeded) and register it inDatabaseQueue.tables()inGRDB+Initialization.swift. The protocol'smigrateColumnshelper auto-handles additive migrations. - Realm (
RealmSwift): legacy layer, used for older models (actions, zones, sensors, etc.). Access viaCurrent.realm(). - UserDefaults: simple preferences and watch communication.