Debugging Guide
Tips and techniques for debugging the Tibber Prices integration during development.
Logging
Enable Debug Logging
Add to configuration.yaml:
logger:
default: info
logs:
custom_components.tibber_prices: debug
Restart Home Assistant to apply.
Key Log Messages
Coordinator Updates:
[custom_components.tibber_prices.coordinator] Successfully fetched price data
[custom_components.tibber_prices.coordinator] Cache valid, using cached data
[custom_components.tibber_prices.coordinator] Midnight turnover detected, clearing cache
Period Calculation:
[custom_components.tibber_prices.coordinator.periods] Calculating BEST PRICE periods: flex=15.0%
[custom_components.tibber_prices.coordinator.periods] Day 2024-12-06: Found 2 periods
[custom_components.tibber_prices.coordinator.periods] Period 1: 02:00-05:00 (12 intervals)
API Errors:
[custom_components.tibber_prices.api] API request failed: Unauthorized
[custom_components.tibber_prices.api] Retrying (attempt 2/3) after 2.0s
VS Code Debugging
Launch Configuration
.vscode/launch.json:
{
"version": "0.2.0",
"configurations": [
{
"name": "Home Assistant",
"type": "debugpy",
"request": "launch",
"module": "homeassistant",
"args": ["-c", "config", "--debug"],
"justMyCode": false,
"env": {
"PYTHONPATH": "${workspaceFolder}/.venv/lib/python3.13/site-packages"
}
}
]
}
Set Breakpoints
Coordinator update:
# coordinator/core.py
async def _async_update_data(self) -> dict:
"""Fetch data from API."""
breakpoint() # Or set VS Code breakpoint
Period calculation:
# coordinator/period_handlers/core.py
def calculate_periods(...) -> list[dict]:
"""Calculate best/peak price periods."""
breakpoint()
pytest Debugging
Run Single Test with Output
.venv/bin/python -m pytest tests/test_period_calculation.py::test_midnight_crossing -v -s
Flags:
-v- Verbose output-s- Show print statements-k pattern- Run tests matching pattern
Debug Test in VS Code
Set breakpoint in test file, use "Debug Test" CodeLens.
Useful Test Patterns
Print coordinator data:
def test_something(coordinator):
print(f"Coordinator data: {coordinator.data}")
print(f"Price info count: {len(coordinator.data['priceInfo'])}")
Inspect period attributes:
def test_periods(hass, coordinator):
periods = coordinator.data.get('best_price_periods', [])
for period in periods:
print(f"Period: {period['start']} to {period['end']}")
print(f" Intervals: {len(period['intervals'])}")
Common Issues
Integration Not Loading
Check:
grep "tibber_prices" config/home-assistant.log
Common causes:
- Syntax error in Python code → Check logs for traceback
- Missing dependency → Run
uv sync - Wrong file permissions →
chmod +x scripts/*
Sensors Not Updating
Check coordinator state:
# In Developer Tools > Template
{{ states.sensor.tibber_home_current_interval_price.last_updated }}
Debug in code:
# Add logging in sensor/core.py
_LOGGER.debug("Updating sensor %s: old=%s new=%s",
self.entity_id, self._attr_native_value, new_value)
Period Calculation Wrong
Enable detailed period logs:
# coordinator/period_handlers/period_building.py
_LOGGER.debug("Candidate intervals: %s",
[(i['startsAt'], i['total']) for i in candidates])
Check filter statistics:
[period_building] Flex filter blocked: 45 intervals
[period_building] Min distance blocked: 12 intervals
[period_building] Level filter blocked: 8 intervals
Performance Profiling
Time Execution
import time
start = time.perf_counter()
result = expensive_function()
duration = time.perf_counter() - start
_LOGGER.debug("Function took %.3fs", duration)
Memory Usage
import tracemalloc
tracemalloc.start()
# ... your code ...
current, peak = tracemalloc.get_traced_memory()
_LOGGER.debug("Memory: current=%d peak=%d", current, peak)
tracemalloc.stop()
Profile with cProfile
python -m cProfile -o profile.stats -m homeassistant -c config
python -m pstats profile.stats
# Then: sort cumtime, stats 20
Live Debugging in Running HA
Remote Debugging with debugpy
Add to coordinator code:
import debugpy
debugpy.listen(5678)
_LOGGER.info("Waiting for debugger attach on port 5678")
debugpy.wait_for_client()
Connect from VS Code with remote attach configuration.
IPython REPL
Install in container:
uv pip install ipython
Add breakpoint:
from IPython import embed
embed() # Drops into interactive shell
💡 Related:
- Testing Guide - Writing and running tests
- Setup Guide - Development environment
- Architecture - Code structure