14 Commits

Author SHA1 Message Date
Du Wenbo
ec3aab28c1 feat: energy flow, weather, comparison, PWA, alarm subs (v1.5.0)
7 new features inspired by iSolarCloud:

1. Animated Energy Flow Diagram — SVG/CSS animated power flow
   between PV, Load, Grid, HeatPump with real-time values
2. Weather Widget — temperature/condition on dashboard header
3. Curve Template Library — save/load Data Query presets
4. Enhanced Device Comparison — multi-device power overlay chart
5. Dispersion Rate Analysis — statistical variation across inverters
   with outlier detection (new Analysis tab)
6. PWA Support — manifest.json + service worker for mobile install
7. Alarm Subscription UI — configurable notification preferences

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
v1.5.0
2026-04-07 10:35:50 +08:00
Du Wenbo
93af4bc16b feat: solar KPIs, version display, feature flags (v1.4.0)
New dashboard KPI cards:
- Performance Ratio (PR) with color thresholds
- Equivalent Utilization Hours
- Daily Revenue (¥)
- Self-Consumption Rate

Version display for field engineers:
- Login page footer: "v1.4.0 | Core: v1.4.0"
- Sidebar footer: version when expanded
- System Settings: full version breakdown

Backend (core sync):
- GET /api/v1/version (no auth) — reads VERSIONS.json
- GET /api/v1/kpi/solar — PR, revenue, equiv hours calculations
- Dashboard energy_today fallback from raw energy_data
- PV device filter includes sungrow_inverter type

Feature flags:
- Sidebar hides disabled features (charging, bigscreen_3d)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
v1.4.0
2026-04-06 22:37:09 +08:00
Du Wenbo
1274e77cb4 feat: Z-Park branding, data collection fix, buyoff pass (v1.3.0)
Branding:
- Replace all Tianpu text/colors with Z-Park (green #52c41a)
- Update login, sidebar, BigScreen, localStorage keys

Data collection:
- Populate ps_id for all 10 inverters (Phase1: 2226182, Phase2: 2226188)
- Fix docker-compose volume mount for customer config.yaml

Buyoff warning fixes:
- Installed capacity: 2200 kW / 10 Sungrow inverters (was wrong Huawei data)
- Feature flags: hide charging menu when features.charging=false
- Device total count: compute client-side from stats
- Device groups: enrich group names from metadata

Buyoff result: CONDITIONAL PASS (21/21 critical, 54/63 total)
Data accuracy: <3% deviation from iSolarCloud reference

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
v1.3.0
2026-04-06 22:05:06 +08:00
Du Wenbo
b3bb33a638 docs: add version management section to README
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
v1.2.0
2026-04-06 09:08:36 +08:00
Du Wenbo
1be9a2e6c5 docs: rewrite README with correct structure, Docker deploy, v1.2.0
- Add frontend/ directory (was missing from structure)
- Fix frontend path from core/frontend to ./frontend
- Fix .env copy path from core/backend/.env to root .env
- Add Docker deployment as primary method
- Add hooks/ to customer config listing
- Add version info referencing VERSIONS.json
- Update subtree pull command with correct Gitea URL

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 08:55:37 +08:00
Du Wenbo
f97be2f3ff fix: update VERSIONS.json to match v1.2.0 tag
VERSIONS.json was still showing 1.1.0 while the git tag and commit
message already referenced v1.2.0. Sync version metadata.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 08:22:10 +08:00
Du Wenbo
d3f47d664c feat: customer frontend, Sungrow collector fixes, real data (v1.2.0)
- Add frontend/ at root (no Three.js, no Charging, green #52c41a theme)
- Fix Sungrow collector: add curPage/size params, unit conversion
- Fix station-level dedup to prevent double-counting
- Add shared token cache for API rate limit protection
- Add .githooks/pre-commit, CLAUDE.md, .gitignore
- Update docker-compose.override.yml frontend -> ./frontend
- Pin bcrypt in requirements.txt
- Add BUYOFF_RESULTS_2026-04-05.md (39/43 pass)
- Data accuracy: 0.0% diff vs iSolarCloud

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-05 23:43:24 +08:00
Du Wenbo
ed30ac31e4 feat: add Z-Park customer hooks + update core to v1.1.0
- core/ updated to ems-core v1.1.0 (hooks plugin system)
- customers/zpark/hooks/zpark_hooks.py: Z-Park custom logic
  - on_alarm_created: 逆变器严重告警 → 自动创建维修工单
  - on_alarm_resolved: 告警恢复日志
  - on_device_status_changed: 逆变器离线告警
  - calculate_custom_kpis: 光伏发电效率、自发自用率

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
v1.0.0
2026-04-04 18:32:33 +08:00
Du Wenbo
67cf2b13da chore: update core to v1.1.0 (hooks plugin system) 2026-04-04 18:32:11 +08:00
Du Wenbo
e306b705bc Squashed 'core/' changes from 92ec910..2b9797d
2b9797d feat: add customer hooks plugin system (v1.1.0)
26d2731 chore: add VERSION file (1.0.0)

git-subtree-dir: core
git-subtree-split: 2b9797d61b501ecbaa73253f6f4001769917a24f
2026-04-04 18:32:11 +08:00
Du Wenbo
d153f8e430 zpark-ems v1.0.0: 中关村医疗器械园EMS客户项目
基于 ems-core v1.0.0,包含:
- customers/zpark/config.yaml — Z-Park品牌配置(阳光电源采集器)
- customers/zpark/devices.json — 10台逆变器 + 8台汇流箱设备清单
- customers/zpark/pricing.json — 北京2026年分时电价
- scripts/seed_zpark.py — Z-Park设备和告警种子数据
- docker-compose.override.yml — Z-Park部署配置
- core/ — ems-core v1.0.0 (git subtree)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 18:19:31 +08:00
Du Wenbo
026c837b91 Squashed 'core/' content from commit 92ec910
git-subtree-dir: core
git-subtree-split: 92ec910a132e379a3a6e442a75bcb07cac0f0010
2026-04-04 18:17:10 +08:00
Du Wenbo
1256992c85 Merge commit '026c837b919ab4380e8a6e6c052364bbf9bbe8a3' as 'core' 2026-04-04 18:17:10 +08:00
Du Wenbo
d8ed16ad24 initial commit 2026-04-04 18:17:07 +08:00