A Home Assistant custom integration that connects to Tovala Smart Ovens via their cloud API. Monitor cooking status, get meal details with images, track cooking history, and receive notifications when your food is ready!
Note: Tovala does not publish a public API. This integration reverse-engineers the mobile app's HTTPS endpoints.
- ๐ฅ Real-time cooking status - Monitor your oven's current state
- โฑ๏ธ Timer tracking - See remaining cook time updated every 10 seconds
- ๐ฝ๏ธ Meal details - Get meal name, image, and ingredients for Tovala meals
- ๐ธ Meal images - Display meal photos in notifications and dashboards
- ๐ Cooking history - View your last 10 cooking sessions
- ๐ Automation ready - Fire events and use attributes in automations
- ๐ Automatic oven discovery - No manual oven ID configuration needed
- Open HACS โ Integrations โ โฎ โ Custom repositories
- Add repository URL:
https://github.com/WeaveHubHQ/ha-tovala - Category: Integration
- Click Install
- Restart Home Assistant
- Go to Settings โ Devices & Services โ Add Integration
- Search for Tovala Smart Oven and sign in with your Tovala credentials
- Copy the
custom_components/tovala/folder to your Home Assistantconfig/custom_components/directory - Restart Home Assistant
- Add the integration from Settings โ Devices & Services
sensor.tovala_time_remaining
Remaining cook time in seconds.
Attributes:
cooking_state- "idle" or "cooking"barcode- The scanned barcodemeal_id- Tovala meal ID (e.g., 463)meal_title- Meal name (e.g., "2 Eggs Over Medium on Avocado Toast")meal_subtitle- Additional meal descriptionmeal_image- Full URL to meal photomeal_ingredients- List of ingredientsestimated_end_time- ISO timestamp when cooking will finish
sensor.tovala_last_cook
Shows your most recent cooking session.
Attributes:
last_cook_barcode- Barcode of last cooklast_cook_meal_id- Meal ID if it was a Tovala meallast_cook_start_time- When cooking startedlast_cook_end_time- When cooking endedlast_cook_status- "complete" or "canceled"recent_history- Array of last 10 cooking sessions
binary_sensor.tovala_timer_running
On when the oven is actively cooking (remaining time > 0).
tovala_timer_finished
Fired when the cooking timer reaches zero.
Payload:
{
"oven_id": "b3d64c11-96db-4ed2-9589-b52fbd0a15b1",
"data": { "state": "idle", "meal": {...}, ... }
}Telegram:
automation:
- alias: "Tovala Cooking Done"
trigger:
- platform: numeric_state
entity_id: sensor.tovala_time_remaining
below: 1
above: -0.3
action:
- service: telegram_bot.send_photo
data:
url: "{{ state_attr('sensor.tovala_time_remaining', 'meal_image') }}"
caption: >-
{% set meal = state_attr('sensor.tovala_time_remaining', 'meal_title') %}
{{ meal if meal else 'Your oven' }} is done cooking!iOS/Android Mobile App:
automation:
- alias: "Tovala Cooking Done - Mobile"
trigger:
- platform: state
entity_id: binary_sensor.tovala_timer_running
from: "on"
to: "off"
action:
- service: notify.mobile_app_YOUR_DEVICE
data:
title: "Tovala Oven"
message: "{{ state_attr('sensor.tovala_time_remaining', 'meal_title') }} is ready!"
data:
image: "{{ state_attr('sensor.tovala_time_remaining', 'meal_image') }}"automation:
- alias: "Tovala Almost Done"
trigger:
- platform: numeric_state
entity_id: sensor.tovala_time_remaining
below: 60
action:
- service: notify.notify
data:
message: "Your {{ state_attr('sensor.tovala_time_remaining', 'meal_title') }} has 1 minute left!"Using Mushroom Cards:
type: custom:mushroom-template-card
primary: Tovala Oven
secondary: >-
{% if state_attr('sensor.tovala_time_remaining', 'meal_title') %}
{{ state_attr('sensor.tovala_time_remaining', 'meal_title') }}
{% elif states('sensor.tovala_time_remaining') | int > 0 %}
{{ states('sensor.tovala_time_remaining') | int // 60 }}m {{ states('sensor.tovala_time_remaining') | int % 60 }}s remaining
{% else %}
Idle
{% endif %}
entity: sensor.tovala_time_remaining
icon: mdi:toaster-oven
icon_color: >-
{% if is_state('binary_sensor.tovala_timer_running', 'on') %}
orange
{% else %}
grey
{% endif %}
tap_action:
action: more-infoAdd to configuration.yaml:
logger:
default: warning
logs:
custom_components.tovala: debugThen restart Home Assistant and check logs in Developer Tools โ Logs.
This means Home Assistant cannot reach Tovala's API:
- Check your internet connection
- Verify credentials - Make sure your email/password are correct
- Test API access:
curl -i -X POST "https://api.beta.tovala.com/v0/getToken" \ -H "Content-Type: application/json" \ -H "X-Tovala-AppID: MAPP" \ -d '{"email":"YOUR_EMAIL","password":"YOUR_PASSWORD","type":"user"}'
- If you get HTTP 200, credentials are valid
- If you get HTTP 401/403, check your email/password
- If connection fails, check firewall/DNS
Your credentials are incorrect. Double-check your Tovala email and password.
Meal details only appear when:
- You scan a Tovala meal barcode (not manual cooking modes)
- The meal is in Tovala's database
- You've reloaded the integration after updating
Manual cooking modes (like "manual-mini-toast-4" or "Bake at 400ยฐ") won't have meal details.
- WebSocket support for real-time updates (currently polls every 10s)
- Multi-oven support with oven selection in UI
- Control capabilities (start/stop cooking remotely)
- Configurable poll interval
- Device triggers for "Timer Started" and "Timer Finished"
Contributions are welcome! Please feel free to submit a Pull Request.
Come see our other apps and integrations at WeaveHub.
MIT ยฉ 2025 Jason Lazerus
This integration is not affiliated with, endorsed by, or supported by Tovala. Use at your own risk. The integration may break if Tovala changes their API.