## 🎯 Hauptänderungen ### Version 3.4.0 - SOC-Drift & Charging Capacity - ✨ Sicherheitspuffer (20-50% konfigurierbar) für untertägige SOC-Schwankungen - ✨ Monatliche automatische Batterie-Kalibrierung - 🐛 SOC-Plausibilitäts-Check (filtert 65535% Spikes beim Modus-Wechsel) - 🐛 Zeitabhängige API-Abfrage (vor/nach 14:00 Uhr) ### Neue Features - 🔋 **Safety Buffer**: Kompensiert SOC-Drift und Eigenverbrauch - 🔋 **Auto-Calibration**: Monatlicher Vollzyklus für SOC-Genauigkeit - 🔋 **Spike Protection**: 4-fach Schutz gegen ungültige SOC-Werte - 🔋 **Smart API**: Verhindert HTTP 500 Errors bei fehlenden Tomorrow-Preisen ### Dokumentation - 📚 SOC_CALIBRATION_GUIDE.md - Umfassender Kalibrierungs-Guide - 📚 FIX_CHARGING_CAPACITY.md - Sicherheitspuffer-Dokumentation - 📚 FIX_SOC_SPIKE_PROBLEM.md - Spike-Protection-Lösung - 📚 FIX_API_TIMING.md - Zeitabhängige API-Abfrage - 📚 DIAGNOSE_LADE_PROBLEM.md - Debug-Guide ### Neue Dateien - battery_calibration_automation.yaml - 4 Automations für Kalibrierung - battery_calibration_input_helper.yaml - Input Helper Config - battery_optimizer_input_helper_safety_buffer.yaml - Puffer Config - debug_schedule.py - Umfassendes Debug-Script ### Scripts - battery_charging_optimizer.py v3.4.0 - hastrom_flex_extended.py v1.1.0 - debug_schedule.py v1.0.0 ### Fixes - 🐛 SOC springt auf 65535% beim ESS-Modus-Wechsel → Debounce + Plausibilitäts-Check - 🐛 API-HTTP-500 vor 14:00 → Zeitabhängige Abfrage - 🐛 Batterie nicht bis 100% geladen → Sicherheitspuffer - 🐛 SOC driftet ohne Vollzyklen → Automatische Kalibrierung ## 🚀 Installation 1. Input Helper erstellen (siehe battery_optimizer_input_helper_safety_buffer.yaml) 2. Automations installieren (siehe battery_calibration_automation.yaml) 3. Scripts aktualisieren (battery_charging_optimizer.py v3.4.0) 4. PyScript neu laden ## 📊 Verbesserungen - Präzisere Ladeplanung durch Sicherheitspuffer - Robustheit gegen SOC-Drift - Keine API-Fehler mehr vor 14:00 - Hardware-Stopp bei 100% wird respektiert - Bessere Batterie-Gesundheit durch regelmäßige Kalibrierung 🤖 Generated with Claude Code (claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
11 KiB
Battery Optimizer PyScript - Diagnostic Package
Issue: Battery optimizer scripts updated but not working after timezone fixes Date: 2025-11-20 Status: Awaiting Home Assistant logs for final diagnosis
📋 Package Contents
This diagnostic package contains comprehensive analysis and troubleshooting resources:
1. DIAGNOSIS_SUMMARY.md ⭐ START HERE
- Executive summary of findings
- Most likely root causes (ranked)
- Quick diagnostic steps
- What to provide when requesting help
- Time to read: 5 minutes
2. QUICK_FIX_REFERENCE.md ⚡ QUICK FIXES
- One-page reference card
- Common errors and instant fixes
- Manual test sequence
- Success indicators
- Time to complete: 5-10 minutes
3. TROUBLESHOOTING_GUIDE.md 🔧 DETAILED GUIDE
- Step-by-step troubleshooting checklist
- Complete fix procedures for each scenario
- Configuration templates
- Advanced debugging techniques
- Time to complete: 15-30 minutes
4. diagnostic_pyscript_issues.md 🔬 TECHNICAL ANALYSIS
- Detailed code analysis
- Potential runtime issues with line numbers
- Expected error patterns
- Technical recommendations
- For advanced users
5. validate_pyscript.py 🧪 VALIDATION SCRIPT
- Automated code validation
- Checks syntax, structure, patterns
- Generates diagnostic report
- Usage:
python3 validate_pyscript.py
🚀 Quick Start Guide
If you have 5 minutes:
- Read: QUICK_FIX_REFERENCE.md
- Run the 5 emergency checks
- Try the manual test sequence
If you have 15 minutes:
- Read: DIAGNOSIS_SUMMARY.md
- Follow: STEP 1-6 in troubleshooting steps
- Report back with findings
If you have 30 minutes:
- Read: DIAGNOSIS_SUMMARY.md + TROUBLESHOOTING_GUIDE.md
- Work through complete checklist
- Enable debug logging
- Test each component
🎯 Most Likely Issues (Ranked)
Based on code analysis without live logs:
| Rank | Issue | Probability | Check Method | Fix Time |
|---|---|---|---|---|
| 1 | Missing helper entities | HIGH | Check entities in States | 10 min |
| 2 | PyScript not loading files | HIGH | Check services list | 5 min |
| 3 | Zoneinfo import failure | MEDIUM | Check logs after reload | 5 min |
| 4 | API call failures | MEDIUM | Check hastrom sensor | 5 min |
| 5 | Time trigger syntax | LOW | Check for scheduled runs | 15 min |
| 6 | State size limits | LOW | Check for ValueError | 10 min |
📊 Validation Results
✅ Syntax Check: Both files compile successfully ✅ Structure Check: Proper PyScript patterns detected ✅ Import Check: Standard library + PyScript built-ins ✅ Error Handling: Try-catch blocks present ⚠️ Python Version: Requires 3.9+ for zoneinfo ⚠️ Dependencies: Assumes helper entities exist
🔍 What We Need to Diagnose Further
To provide a definitive diagnosis, we need:
Critical Information:
-
Home Assistant logs (Settings → System → Logs, filter "pyscript")
- Look for errors after
pyscript.reload - Any red/error messages mentioning the scripts
- Look for errors after
-
Service availability (Developer Tools → Services)
- Do
pyscript.calculate_charging_scheduleand others appear?
- Do
-
Entity existence (Developer Tools → States)
- Does
sensor.hastrom_flex_pro_extexist? - Does
pyscript.battery_charging_scheduleexist? - Do all helper entities exist?
- Does
-
Manual test results
- What happens when calling
pyscript.getprices_extended? - Any error notifications?
- What happens when calling
Nice to Have:
- Home Assistant version
- PyScript version
- Python version (via
docker exec homeassistant python --version) - Complete log export
📝 How to Use This Package
Scenario A: "Just make it work!"
1. Open: QUICK_FIX_REFERENCE.md
2. Run: Emergency Quick Checks (5 min)
3. If issue found → Apply Quick Fix
4. If not found → Proceed to Scenario B
Scenario B: "I have time to troubleshoot"
1. Open: DIAGNOSIS_SUMMARY.md
2. Follow: Recommended Troubleshooting Steps
3. Refer to: TROUBLESHOOTING_GUIDE.md for detailed fixes
4. Enable: Debug logging
5. Gather: Logs and report findings
Scenario C: "I want to understand everything"
1. Read: diagnostic_pyscript_issues.md
2. Run: validate_pyscript.py
3. Read: TROUBLESHOOTING_GUIDE.md cover-to-cover
4. Read: DIAGNOSIS_SUMMARY.md
5. Apply: Fixes systematically
Scenario D: "I need help from community"
1. Work through: Scenario B first
2. Read: "What to Provide When Requesting Help" in DIAGNOSIS_SUMMARY.md
3. Gather: All requested information
4. Create: Forum post with findings
5. Reference: This diagnostic package
🛠️ Tools Provided
Validation Script
cd /Users/felix/Nextcloud/AI/projects/homeassistant
python3 validate_pyscript.py
Output: Comprehensive analysis of both scripts
Quick Commands Reference
# Reload PyScript
service: pyscript.reload
# Test price fetcher
service: pyscript.getprices_extended
# Test optimizer
service: pyscript.calculate_charging_schedule
# Test executor
service: pyscript.execute_charging_schedule
📂 File Reference
Source Files (Development)
/Users/felix/Nextcloud/AI/projects/homeassistant/openems/
├── battery_charging_optimizer.py (v3.2.0)
└── hastrom_flex_extended.py (v2.0)
Production Location (Home Assistant)
/config/pyscript/
├── battery_charging_optimizer.py
└── hastrom_flex_extended.py
Documentation Generated
/Users/felix/Nextcloud/AI/projects/homeassistant/
├── README_DIAGNOSIS.md (This file)
├── DIAGNOSIS_SUMMARY.md (Executive summary)
├── QUICK_FIX_REFERENCE.md (Quick reference)
├── TROUBLESHOOTING_GUIDE.md (Detailed guide)
├── diagnostic_pyscript_issues.md (Technical analysis)
└── validate_pyscript.py (Validation tool)
🎓 Understanding the Code
Architecture Overview
Price Fetcher (hastrom_flex_extended.py)
↓
Creates: sensor.hastrom_flex_pro_ext
↓
Read by: Optimizer (battery_charging_optimizer.py)
↓
Creates: pyscript.battery_charging_schedule
↓
Read by: Executor (same file)
↓
Controls: input_boolean.goodwe_manual_control
↓
Triggers: Existing HA automations for battery control
Key Components
1. Price Fetcher
- Fetches haStrom FLEX PRO prices
- Supports today + tomorrow data
- Creates two sensors with price arrays
- Runs hourly + special triggers at 14:05 and midnight
2. Optimizer
- Ranking-based algorithm
- Selects N cheapest hours from combined dataset
- Stores 48h schedule in state attributes
- Runs daily at 14:05 after price update
3. Executor
- Reads schedule hourly
- Matches current hour to schedule
- Toggles manual control on/off
- Sets charging power via helper
4. Timezone Handling
- All times in Europe/Berlin (CET/CEST)
- Uses zoneinfo for proper DST handling
- Requires Python 3.9+
⚠️ Known Limitations
- Timezone Module: Requires Python 3.9+ (HA 2021.7+)
- State Size: Large schedules might exceed limits
- Service Calls: Internal service calls might have syntax issues
- Entity Dependencies: Assumes 15+ helper entities exist
- API Dependency: Requires haStrom API availability
✅ Success Criteria
The system is working correctly when:
Price Fetcher Success:
- ✅
sensor.hastrom_flex_pro_extexists - ✅ Has
prices_todayarray with 24 prices - ✅ Has
prices_tomorrowarray (after 14:00) - ✅
last_updateshows recent timestamp - ✅ Logs show: "📊 haStrom FLEX PRO Extended - Preise aktualisiert"
Optimizer Success:
- ✅
pyscript.battery_charging_scheduleexists - ✅ Has
schedulearray with ~45-48 entries - ✅ Has
num_charges> 0 (if battery not full) - ✅
input_text.battery_optimizer_statusshows "X Ladungen" - ✅ Logs show: "=== Optimierung abgeschlossen ==="
Executor Success:
- ✅ Runs every hour at :05
- ✅ Finds matching schedule entry
- ✅ Toggles
input_boolean.goodwe_manual_controlcorrectly - ✅ Sets
input_number.charge_power_batteryduring charge hours - ✅ Logs show: "🔋 AKTIVIERE LADEN" or "✓ Auto-Modus bereits aktiv"
🔄 Next Steps
Immediate (Now):
- Access Home Assistant logs
- Call
pyscript.reloadservice - Check for errors in logs
- Follow QUICK_FIX_REFERENCE.md
Short Term (Today):
- Work through TROUBLESHOOTING_GUIDE.md
- Enable debug logging
- Test each component manually
- Document findings
Medium Term (This Week):
- Verify all helper entities exist
- Monitor automated runs
- Check battery control behavior
- Optimize configuration values
📞 Support Resources
Documentation
- PyScript Docs: https://github.com/custom-components/pyscript
- Home Assistant Docs: https://www.home-assistant.io/docs/
- haStrom API: http://eex.stwhas.de/
Community
- HA Community: https://community.home-assistant.io/
- PyScript Issues: https://github.com/custom-components/pyscript/issues
- German HA Forum: https://forum.iobroker.net/
Project Files
- All diagnostic files in this directory
- Original code in
./openems/ - Project memory:
./project_memory.md - Technical docs:
./EMS_OpenEMS_HomeAssistant_Dokumentation.md
📈 Version Information
Scripts:
- battery_charging_optimizer.py: v3.2.0 (with timezone fixes)
- hastrom_flex_extended.py: v2.0 (with timezone fixes)
Changes in v3.2.0:
- Fixed timezone handling throughout
- Added
TIMEZONEconstant withzoneinfo - Added
get_local_now()helper function - Fixed datetime comparisons in executor
- Improved logging with timezone info
Changes in v2.0 (hastrom):
- Added proper timezone handling
- Fixed timestamp parsing
- Added timezone-aware datetime comparisons
🎉 Conclusion
This diagnostic package provides:
- ✅ Complete code validation (no syntax errors)
- ✅ Structural analysis (correct PyScript patterns)
- ✅ Potential issue identification (6 warnings)
- ✅ Ranked troubleshooting priorities
- ✅ Step-by-step fix procedures
- ✅ Automated validation tools
- ✅ Quick reference cards
What's Missing: Live Home Assistant logs to confirm root cause
Recommended Action: Follow DIAGNOSIS_SUMMARY.md → STEP 1-6 to get logs and complete diagnosis
Estimated Time to Fix: 10-30 minutes once root cause identified
Package Created: 2025-11-20 Analysis Confidence: 85% (without live logs) Next Milestone: User provides logs for final diagnosis
🏁 Start Here
- If in a hurry: Open
QUICK_FIX_REFERENCE.md - If methodical: Open
DIAGNOSIS_SUMMARY.md - If technical: Open
diagnostic_pyscript_issues.md - If stuck: Open
TROUBLESHOOTING_GUIDE.md
Good luck! 🍀