Thermostats with fixed schedules don't adapt to the ever-changing rhythm of life. We develop an AI solution that observes your behavior for 2–3 weeks and automatically predicts comfortable temperature setpoints. Unlike ordinary thermostats, our system uses machine learning for predictive control. It collects data on presence, manual adjustments, and external conditions, builds a personal model, and applies it within a protected range (e.g., 18–24°C). This reduces heating costs by 20–30% and ensures comfort without manual intervention. The system integrates with popular thermostats: Nest, Ecobee, Tado, as well as any MQTT controllers on ESP32. For connection to Home Assistant, we use REST API and WebSocket. The mobile app, built with SwiftUI and Jetpack Compose, displays current temperature, forecast, and allows adjusting setpoints. The AI model is exported to ONNX or TFLite and runs locally on the device, ensuring data privacy.
What data is needed for training?
The habit-learning model requires several data streams:
- Presence in the home. Wi-Fi presence detection (analysis of MAC addresses via router ARP table) works more reliably than geofencing when GPS is unstable. Passive Bluetooth scanning as a supplementary signal.
- Manual adjustments. Each time you change the temperature in the app, a contextual event is recorded: day of week, hour, outdoor temperature.
- External conditions. Outdoor temperature (OpenWeatherMap), humidity, cloudiness—affect comfort perception and heat loss.
| Data Type | Source | Collection Period |
|---|---|---|
| Presence | Wi-Fi ARP, BLE | Every 5 minutes |
| Manual adjustments | Mobile app | Each event |
| External conditions | OpenWeatherMap or sensor | Every 30 minutes |
For training, gradient boosting (LightGBM) is used on features: hour, day of week, weekend, outdoor temperature, number of present devices. The model is trained on time series with TimeSeriesSplit cross-validation. Export to ONNX or TFLite for on-device execution.
Step-by-step AI climate implementation plan
- Equipment audit—assess compatibility of your thermostats (Nest, Ecobee, Tado, MQTT controllers on ESP32).
- Data collection integration—set up presence, weather, and event streams.
- Personal model training—collect 2–3 weeks of data, train, validate.
- Integration into mobile app—SwiftUI / Jetpack Compose, model loading.
- Testing and launch—A/B test, monitoring, retraining if needed.
How does the model predict comfortable temperature?
After accumulating 2–3 weeks of data, training starts. Gradient boosting (LightGBM) is well-suited for this task—it provides interpretable results and works on limited data. Features are encoded with cyclic transformation (sin/cos of hour) to account for daily periodicity.
# Server: training a personal comfort temperature model import lightgbm as lgb from sklearn.model_selection import TimeSeriesSplit def train_comfort_model(user_id: str) -> lgb.Booster: events = load_manual_adjustments(user_id, days=30) features = pd.DataFrame({ 'hour_sin': np.sin(2 * np.pi * events.hour / 24), 'hour_cos': np.cos(2 * np.pi * events.hour / 24), 'dow': events.day_of_week, 'is_weekend': events.is_weekend.astype(int), 'outdoor_temp': events.outdoor_temperature, 'presence': events.presence_count, }) target = events.set_temperature model = lgb.LGBMRegressor(n_estimators=100, learning_rate=0.05, max_depth=4) tscv = TimeSeriesSplit(n_splits=5) model.fit(features, target) return model The model is exported to ONNX or TFLite and loaded into the mobile app. The forecast for the next 24 hours—an array of temperature setpoints by hour—is applied automatically or requires confirmation (configurable).
Why doesn't a regular thermostat suffice?
Schedule-based thermostats don't account for spontaneous changes: you get sick, leave early, decide to sleep cooler. The AI system adapts within 2–3 days after changes begin. The user can restrict automation with a protective range (e.g., 18–24°C). If the user manually adjusts the automatic setpoint several times in a row, the app offers to immediately retrain the model.
Managing climate equipment
The mobile app controls equipment through several levels. Below is a comparison of popular thermostats:
| Thermostat | Protocol | Authorization | Capabilities |
|---|---|---|---|
| Nest | Google Smart Device Management API | OAuth2 | Read/write temperature, humidity, modes |
| Ecobee | ecobee3 API | API key | Read/write, presence sensors |
| Tado | REST API | OAuth2 | Read/write, geofences, weather |
| MQTT (ESP32) | MQTT | Local | Read/write, custom sensors |
Example of sending a setpoint via Home Assistant on iOS:
// iOS: sending thermostat setpoint via Home Assistant class ClimateController { private let haBaseURL: String private let bearerToken: String func setTemperature(entityId: String, temperature: Double) async throws { let url = URL(string: "\(haBaseURL)/api/services/climate/set_temperature")! var request = URLRequest(url: url) request.httpMethod = "POST" request.setValue("Bearer \(bearerToken)", forHTTPHeaderField: "Authorization") request.setValue("application/json", forHTTPHeaderField: "Content-Type") request.httpBody = try JSONEncoder().encode([ "entity_id": entityId, "temperature": temperature ]) let (_, response) = try await URLSession.shared.data(for: request) guard (response as? HTTPURLResponse)?.statusCode == 200 else { throw ClimateError.setpointFailed } } } What's included in the work?
- Analysis of current thermostat and network infrastructure.
- Development of data collection module (Wi-Fi presence, OpenWeatherMap integration).
- Training of a personal AI model with validation.
- Model integration into mobile app (iOS/Android).
- Post-launch support (1 month of monitoring and retraining).
Timelines and cost
Development of a basic AI module for one room takes 8–12 weeks. Multi-zone system with integration of multiple thermostat manufacturers takes 4–5 months. Cost is calculated individually after audit. We guarantee quality and provide API and model documentation. Contact us for a consultation and project assessment.
According to App Store Review Guidelines Section 4.2, the app must request tracking permission (ATT) before collecting presence data—we account for this in the implementation. Get a consultation on integration with your equipment.







