## 🎯 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>
397 lines
11 KiB
Markdown
397 lines
11 KiB
Markdown
# 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:
|
|
1. Read: **QUICK_FIX_REFERENCE.md**
|
|
2. Run the 5 emergency checks
|
|
3. Try the manual test sequence
|
|
|
|
### If you have 15 minutes:
|
|
1. Read: **DIAGNOSIS_SUMMARY.md**
|
|
2. Follow: STEP 1-6 in troubleshooting steps
|
|
3. Report back with findings
|
|
|
|
### If you have 30 minutes:
|
|
1. Read: **DIAGNOSIS_SUMMARY.md** + **TROUBLESHOOTING_GUIDE.md**
|
|
2. Work through complete checklist
|
|
3. Enable debug logging
|
|
4. 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:
|
|
1. **Home Assistant logs** (Settings → System → Logs, filter "pyscript")
|
|
- Look for errors after `pyscript.reload`
|
|
- Any red/error messages mentioning the scripts
|
|
|
|
2. **Service availability** (Developer Tools → Services)
|
|
- Do `pyscript.calculate_charging_schedule` and others appear?
|
|
|
|
3. **Entity existence** (Developer Tools → States)
|
|
- Does `sensor.hastrom_flex_pro_ext` exist?
|
|
- Does `pyscript.battery_charging_schedule` exist?
|
|
- Do all helper entities exist?
|
|
|
|
4. **Manual test results**
|
|
- What happens when calling `pyscript.getprices_extended`?
|
|
- Any error notifications?
|
|
|
|
### 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
|
|
```bash
|
|
cd /Users/felix/Nextcloud/AI/projects/homeassistant
|
|
python3 validate_pyscript.py
|
|
```
|
|
|
|
**Output**: Comprehensive analysis of both scripts
|
|
|
|
### Quick Commands Reference
|
|
```yaml
|
|
# 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
|
|
|
|
1. **Timezone Module**: Requires Python 3.9+ (HA 2021.7+)
|
|
2. **State Size**: Large schedules might exceed limits
|
|
3. **Service Calls**: Internal service calls might have syntax issues
|
|
4. **Entity Dependencies**: Assumes 15+ helper entities exist
|
|
5. **API Dependency**: Requires haStrom API availability
|
|
|
|
---
|
|
|
|
## ✅ Success Criteria
|
|
|
|
The system is working correctly when:
|
|
|
|
### Price Fetcher Success:
|
|
- ✅ `sensor.hastrom_flex_pro_ext` exists
|
|
- ✅ Has `prices_today` array with 24 prices
|
|
- ✅ Has `prices_tomorrow` array (after 14:00)
|
|
- ✅ `last_update` shows recent timestamp
|
|
- ✅ Logs show: "📊 haStrom FLEX PRO Extended - Preise aktualisiert"
|
|
|
|
### Optimizer Success:
|
|
- ✅ `pyscript.battery_charging_schedule` exists
|
|
- ✅ Has `schedule` array with ~45-48 entries
|
|
- ✅ Has `num_charges` > 0 (if battery not full)
|
|
- ✅ `input_text.battery_optimizer_status` shows "X Ladungen"
|
|
- ✅ Logs show: "=== Optimierung abgeschlossen ==="
|
|
|
|
### Executor Success:
|
|
- ✅ Runs every hour at :05
|
|
- ✅ Finds matching schedule entry
|
|
- ✅ Toggles `input_boolean.goodwe_manual_control` correctly
|
|
- ✅ Sets `input_number.charge_power_battery` during charge hours
|
|
- ✅ Logs show: "🔋 AKTIVIERE LADEN" or "✓ Auto-Modus bereits aktiv"
|
|
|
|
---
|
|
|
|
## 🔄 Next Steps
|
|
|
|
### Immediate (Now):
|
|
1. Access Home Assistant logs
|
|
2. Call `pyscript.reload` service
|
|
3. Check for errors in logs
|
|
4. Follow QUICK_FIX_REFERENCE.md
|
|
|
|
### Short Term (Today):
|
|
1. Work through TROUBLESHOOTING_GUIDE.md
|
|
2. Enable debug logging
|
|
3. Test each component manually
|
|
4. Document findings
|
|
|
|
### Medium Term (This Week):
|
|
1. Verify all helper entities exist
|
|
2. Monitor automated runs
|
|
3. Check battery control behavior
|
|
4. 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 `TIMEZONE` constant with `zoneinfo`
|
|
- 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
|
|
|
|
1. **If in a hurry**: Open `QUICK_FIX_REFERENCE.md`
|
|
2. **If methodical**: Open `DIAGNOSIS_SUMMARY.md`
|
|
3. **If technical**: Open `diagnostic_pyscript_issues.md`
|
|
4. **If stuck**: Open `TROUBLESHOOTING_GUIDE.md`
|
|
|
|
**Good luck! 🍀**
|