Commit Graph

30 Commits

Author SHA1 Message Date
Yinyin Liu 50bc85ff2a unified daily report data from S3 and then db and fallback to xlsx and the container size is consistent among 4 tubs 2026-03-12 14:39:24 +01:00
Yinyin Liu 1306ae6b9f digested hourly and daily data from S3 for Sinexcel 2026-03-11 11:43:55 +01:00
Yinyin Liu a1911325ad added installation name in monthly and yearly email service 2026-03-10 13:11:20 +01:00
Yinyin Liu ac034b9983 fixed monthly and yearly report overlap issue of PV and Battery performance 2026-03-10 12:50:36 +01:00
Yinyin Liu 6cf14e3483 daily tab design with hourly data and last week quick entry with self-efficiency on top 2026-03-10 12:32:01 +01:00
Yinyin Liu f7ee347fc5 cahched weekly report 2026-03-10 10:50:17 +01:00
Yinyin Liu 8cd602c5cd added weather API to generate predition for weekly report 2026-03-09 16:24:29 +01:00
Yinyin Liu 98abd68366 Added network provider in Information tab 2026-03-09 13:43:11 +01:00
Yinyin Liu f8b9428ce4 Merge feature/ticket-dashboard: backend data layer, CRUD, AI diagnosis service, 9 endpoints 2026-03-06 09:52:52 +01:00
Yinyin Liu 662810db98 fixed weeks to days in monthly report system 2026-03-05 14:09:19 +01:00
Yinyin Liu 9cee5398d4 added ticket dashboard backend: data models, CRUD, AI diagnosis service, and 9 controller endpoints
Week 1 of ticket dashboard MVP — backend only:
- 4 new SQLite tables: Ticket, TicketComment, TicketAiDiagnosis, TicketTimelineEvent
- CRUD methods in Database/ partial classes with cascade delete
- TicketDiagnosticService for async Mistral AI diagnosis (fire-and-forget)
- 9 admin-only Controller endpoints for ticket CRUD, comments, and detail view
- Ticket cleanup integrated into Delete(Installation) cascade
2026-03-05 14:03:34 +01:00
Yinyin Liu 35b64c3318 store hourly energy records in SQLite and remove file cache 2026-03-02 18:52:36 +01:00
Yinyin Liu 1761914f24 restructured data pipeline for report system and updated the way to create monthly and yearly report 2026-03-02 12:49:46 +01:00
Yinyin Liu 78b9c2dc72 generate monthly and yearly report based on xlsx files 2026-02-27 11:48:05 +01:00
Yinyin Liu 062fd5141f added pause and resume alarm diagnosis review campaign service 2026-02-26 08:25:15 +01:00
Yinyin Liu e72f16f26b improve alarm diagnosis review service 2026-02-25 20:08:40 +01:00
Yinyin Liu 8de43276a0 fixed AlarmKnowledgeBase issue 2026-02-25 08:09:11 +01:00
Yinyin Liu 2f8eda5e7e build easy form to collect sodistore home alarm diagnosis review 2026-02-25 06:48:23 +01:00
Yinyin Liu 50c45399bd fix inesco and sodistore home naming and remove Mistral AI info 2026-02-24 19:08:37 +01:00
Yinyin Liu 36848b97c5 improved weekly performance report quality based on inesco team meeting feedback on 24.02 2026-02-24 15:52:28 +01:00
Yinyin Liu 3bffe70a75 translated all Sinexcel and Growatt Alarm now it also shows in the frontend of UI 2026-02-23 17:59:03 +01:00
Yinyin Liu 25280afb8f add behavioral pattern detection using AI to enrich weekly performance report's insight to customers 2026-02-23 07:40:22 +01:00
Yinyin Liu d7300dde91 improve growatt and sinexcel alarm knowledge base with AI 2026-02-18 16:23:08 +01:00
Yinyin Liu 8e50220242 added language support for monitor AI and non-AI content and email delivery 2026-02-18 12:12:58 +01:00
Yinyin Liu 77f6e0de6c AI-P1: Weekly Performance Report 1.0 2026-02-18 07:36:00 +01:00
Yinyin Liu c076d55407 AI diagnosis UX improvements: status-aware, time-filtered, simpler explanations
- Only show AI diagnosis when installation status is red/orange (not green/offline)
- Filter alarms to last 24 hours to avoid showing outdated issues
- Show alarm name first with "Last seen" timestamp instead of "AI Diagnosis" label
- Update Mistral prompt for shorter, non-technical bullet-point explanations
- Fix Mistral JSON parsing when response wrapped in markdown code fences
- Add TestDiagnoseError endpoint for testing full AI flow without auth

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 12:16:35 +01:00
Yinyin Liu 6460328eb0 Safe mode for AI diagnostics, align alarm keys with device enums, and multi-diagnosis frontend
- Remove API key gate so knowledge base works without Mistral key
- Return 204 No Content instead of 500 when no diagnosis available
- Rewrite AlarmKnowledgeBase keys to match Sinexcel property names and Growatt enum names
- Fix SQLite OrderBy crash in DiagnosticService
- Frontend: show latest 3 unique alarms with independent expand/collapse and handle 204

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 11:32:49 +01:00
Yinyin Liu 0c918e86ae Fix build errors: FrozenDictionary (.NET 8) and Flurl 3.x API compatibility
- Replace FrozenDictionary with IReadOnlyDictionary for .NET 6 compat
- Use WithHeader instead of SetHeader for Flurl.Http 3.2.4
- Fix FlurlHttpException error logging for Flurl 3.x

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 07:55:43 +01:00
Yinyin Liu 68f4006f55 Switch AI diagnostics from OpenAI to Mistral and use .env for API key
- Changed API endpoint to api.mistral.ai, model to mistral-small-latest
- Replaced openAiConfig.json with .env file for secure API key storage
- Added .env loader in Program.cs, added .env to .gitignore

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 07:45:16 +01:00
Yinyin Liu e7f8aacc34 Integrate AI on Alarm 2026-02-06 12:57:12 +01:00