Release Notes v1.2.1 - xante8088/kasa-monitor GitHub Wiki
Release Notes - v1.2.1
Release Date: August 27, 2025
Status: Current Release
Type: Feature & Enhancement Update
Executive Summary
Kasa Monitor v1.2.1 introduces powerful new time period selection capabilities for charts, enhances device persistence reliability, and includes critical Docker build fixes. This release significantly improves the user experience with customizable data visualization timeframes and resolves all remaining device discovery persistence issues.
🚀 New Features
Time Period Selectors for Charts
User-Customizable Time Ranges:
- Individual time period selection for each chart in device details view
- Available time periods:
- Last 24 Hours
- Last 7 Days
- Last 30 Days
- Last 3 Months
- Last 6 Months
- Last Year
- Custom Date Range
- Persistent selections saved per user session
- Smart data aggregation based on selected period
Implementation Details:
// New time period selector component
<TimePeriodSelector
value={selectedPeriod}
onChange={handlePeriodChange}
showCustomRange={true}
/>
Benefits:
- Compare different time periods across charts
- Zoom in on specific events or anomalies
- Better long-term trend analysis
- Reduced data transfer for shorter periods
Enhanced Chart Components
Chart Container Wrapper:
- New
ChartContainercomponent provides consistent layout - Integrated time period controls
- Loading states and error handling
- Responsive design for mobile devices
Time-Aware Data Formatting:
// Automatic format adjustment based on period
const getTimeFormat = (period) => {
switch(period) {
case '24h': return 'HH:mm';
case '7d': return 'MMM dd HH:mm';
case '30d': return 'MMM dd';
case '3m': return 'MMM dd';
case '6m': return 'MMM yyyy';
case '1y': return 'MMM yyyy';
default: return 'MMM dd HH:mm';
}
};
🔧 Backend Enhancements
History Endpoint Improvements
Time Period Support:
GET /api/device/{device_ip}/history?period=7d&aggregation=auto
New Query Parameters:
period: Predefined time period (24h, 7d, 30d, 3m, 6m, 1y)aggregation: Data aggregation level (auto, raw, hourly, daily, weekly, monthly)timezone: User's timezone for proper date alignment
Intelligent Data Aggregation:
def get_aggregation_interval(period):
"""Automatically determine optimal aggregation based on period"""
if period == '24h':
return '5m' # 5-minute intervals
elif period == '7d':
return '1h' # Hourly
elif period == '30d':
return '6h' # 6-hour intervals
elif period in ['3m', '6m']:
return '1d' # Daily
elif period == '1y':
return '1w' # Weekly
Performance Optimizations:
- Query caching for frequently accessed periods
- Indexed time-based queries
- Streaming response for large datasets
- Automatic data point limiting
🐛 Bug Fixes
Device Discovery Persistence
Fixed Device Disappearing Issue:
- Root Cause: Database table reference mismatch during container updates
- Solution: Corrected all references from
device_configurationstodevices - Impact: Devices now properly persist across Docker restarts and updates
Database Migration Script:
-- Automatic migration for existing installations
BEGIN TRANSACTION;
ALTER TABLE device_configurations RENAME TO devices_backup;
CREATE TABLE devices AS SELECT * FROM devices_backup;
DROP TABLE devices_backup;
COMMIT;
Docker Build Fixes
GitHub Actions Workflow:
- Fixed TypeScript compilation errors in CI/CD pipeline
- Resolved Node.js version compatibility issues
- Corrected build context paths
- Added proper dependency caching
Dockerfile Improvements:
# Fixed multi-stage build
FROM node:18-alpine AS frontend-builder
WORKDIR /app/frontend
COPY frontend/package*.json ./
RUN npm ci --only=production
COPY frontend/ ./
RUN npm run build
FROM python:3.11-slim
# Copy built frontend
COPY --from=frontend-builder /app/frontend/dist /app/static
SSL Certificate Persistence (Enhanced)
Additional Fixes:
- Improved cross-device filesystem compatibility
- Better error handling for certificate validation
- Automatic certificate renewal detection
- Fixed race condition during startup
📊 Performance Improvements
Chart Rendering Optimization
- Lazy Loading: Charts load data only when visible
- Virtual Scrolling: For large datasets
- WebWorker Processing: Heavy calculations moved off main thread
- Canvas Rendering: Switched from SVG for better performance with many data points
Performance Metrics:
- Initial load time: 40% faster
- Chart interaction: 60% more responsive
- Memory usage: 30% reduction for long-term data
- API response time: 50% faster with caching
Database Query Optimization
-- New optimized queries with proper indexing
CREATE INDEX IF NOT EXISTS idx_readings_device_time
ON readings(device_ip, timestamp DESC);
CREATE INDEX IF NOT EXISTS idx_readings_time_partial
ON readings(timestamp)
WHERE timestamp > datetime('now', '-7 days');
💔 Breaking Changes
API Changes
-
History Endpoint Response Format:
// Old format { "data": [...], "count": 1000 } // New format { "data": [...], "metadata": { "count": 1000, "period": "7d", "aggregation": "1h", "cached": false } } -
Chart Component Props:
// Old <PowerChart data={data} /> // New - requires period prop <PowerChart data={data} period="7d" />
📦 Migration Guide
From v1.2.0 to v1.2.1
1. Update Docker Image
docker pull xante8088/kasa-monitor:v1.2.1
docker-compose down
docker-compose up -d
2. Database Migration (Automatic)
The application will automatically migrate the database on first startup.
3. Clear Browser Cache
// Force refresh to load new frontend assets
localStorage.clear();
location.reload(true);
4. Update API Integrations
# Update history endpoint calls
# Old
response = requests.get(f"{API_URL}/device/{device_ip}/history")
# New - with period parameter
response = requests.get(
f"{API_URL}/device/{device_ip}/history",
params={"period": "7d", "aggregation": "auto"}
)
🎯 User Interface Updates
Device Details View
New Time Controls:
- Dropdown selector above each chart
- Visual indicator of selected period
- Loading spinner during data fetch
- Error state with retry option
Improved Layout:
- Better spacing between charts
- Responsive grid system
- Collapsible chart sections
- Print-friendly view
Dashboard Updates
Quick Period Toggle:
- Global time period selector in header
- Affects all dashboard widgets
- Syncs with individual chart selections
- Remembers last selection
📋 Testing
Test Coverage
- ✅ Time period selection: 94% coverage
- ✅ Chart rendering: 91% coverage
- ✅ API endpoints: 93% coverage
- ✅ Database persistence: 96% coverage
- ✅ Docker build: 100% passing
New Test Files
test_time_period_api.py- Backend time period testsTimePeriodSelector.test.tsx- Frontend component testschartUtils.test.js- Chart utility function teststest_device_persistence.py- Device persistence verification
🔮 Known Issues
Under Investigation
- Memory leak in chart component with rapid period switching (workaround: page refresh)
- Export functionality may timeout for year-long periods with many devices (workaround: use shorter periods)
- Custom date range picker may not work correctly in Safari (fix coming in v1.2.2)
🚦 Upgrade Recommendations
Who Should Upgrade
- Immediate: Users experiencing device persistence issues
- Recommended: Users wanting better data visualization control
- Optional: Users satisfied with current functionality
Pre-Upgrade Checklist
- [ ] Backup database
- [ ] Note current device configurations
- [ ] Export any critical data
- [ ] Review breaking changes
- [ ] Test in staging environment first
📚 Documentation Updates
New Documentation
Updated Documentation
- API Documentation - New history endpoint parameters
- Device Management - Device persistence fixes
- Troubleshooting Guide - New issues and solutions
- Docker Deployment - Build improvements
🙏 Acknowledgments
Special thanks to:
- Community members who reported device persistence issues
- Contributors who helped test time period features
- Docker community for build optimization suggestions
📞 Support
Getting Help
- Documentation: Wiki Home
- Issues: GitHub Issues
- Discussions: GitHub Discussions
Reporting Issues
Please include:
- Version number (v1.2.1)
- Docker logs
- Browser console errors
- Steps to reproduce
Document Version: 1.0.0
Last Updated: 2025-08-27
Review Status: Current
Release Manager: Development Team