chore: add a CLAUDE.md (#22107)

This commit is contained in:
andig 2025-06-28 15:18:54 +02:00 • committed by GitHub
parent 581b06f9a8
commit 7abbefbe7f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

124
CLAUDE.md Normal file
View file

@ -0,0 +1,124 @@
# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## Project Overview
evcc is an extensible EV Charge Controller and home energy management system written in Go with a Vue.js frontend. It manages electric vehicle charging, integrates with solar systems, and provides local energy management without cloud dependencies.
## Core Development Commands
### Build & Development
- `make` - Build the full application (UI + Go binary)
- `make build` - Build Go binary only
- `make ui` - Build UI assets only
- `go run ./...` - Run without building binary
- `./evcc` - Run the built binary
- `./evcc --demo` - Run with demo configuration
### Dependencies
- `make install` - Install Go tools and dependencies
- `make install-ui` - Install Node.js dependencies (`npm ci`)
### Testing & Quality
- `make test` - Run Go tests
- `make test-ui` - Run frontend tests (`npm test`)
- `make lint` - Run Go linting (golangci-lint)
- `make lint-ui` - Run frontend linting (Prettier, ESLint, TypeScript)
### Frontend Development
- `npm run dev` - Start Vue dev server (http://127.0.0.1:7071)
- `npm run storybook` - Run Storybook (http://127.0.0.1:6006)
- `npm run playwright` - Run integration tests
- `npm run simulator` - Run device simulator (http://localhost:7072)
### Device Templates
- `evcc --template-type charger --template new-charger-template.yaml` - Test device templates
- `make docs` - Generate template documentation
## Architecture
### Core Components
- **main.go** - Entry point, embeds web assets and i18n files
- **cmd/** - CLI commands and application setup
- **core/** - Core business logic:
- **loadpoint.go** - EV charging point management
- **site.go** - Site-wide energy management
- **planner/** - Smart charging planning
- **coordinator/** - Multi-loadpoint coordination
- **api/** - API definitions and types
- **server/** - HTTP server, WebSocket, MQTT, and database
- **charger/**, **meter/**, **vehicle/** - Device integrations
- **tariff/** - Tariff integrations
- **plugin/** - Plugin system for device and tariff communication
- **assets/** - Vue.js frontend application
### Frontend Structure
- **assets/js/** - TypeScript/Vue.js application
- **assets/views/** - Vue components and pages
- **i18n/** - Internationalization files
- **dist/** - Built frontend assets (generated)
### Configuration
- Uses YAML configuration files
- Templates in `templates/definition/` for device and tariff configurations
- Database: SQLite (default: `evcc.db`)
## Key Development Patterns
### Device Integration
- Device types: chargers, meters, vehicles (and tariffs)
- Plugin system supports: Modbus, HTTP, MQTT, JavaScript, Go
- Templates define device capabilities and configuration
- Use `_blueprint.go` as starting point for new Go implementations
### Testing
- Go tests use standard `testing` package
- Frontend tests use Vitest
- Integration tests use Playwright
- Simulator available for testing without real devices
### Internationalization
- Translations managed via Weblate
- Update both `i18n/de.json` and `i18n/en.json` for new strings
- Use `$t()` function in Vue components
## Important File Locations
- Configuration: `evcc.yaml` (or specified with `--config`)
- Database: `evcc.db` (or specified with `--database`)
- Device templates: `templates/definition/`
- Web assets: `assets/` (source), `dist/` (built)
- Generated code: Files ending in `_enumer.go`, `*_decorators.go`
## Common Development Workflows
### Adding New Device Support
1. Create template in `templates/definition/[type]/`
2. If Go code needed, implement in respective package
3. Test with `evcc --template-type [type] --template [file]`
4. Run `make docs` to update documentation
### Frontend Development
1. Start backend: `make build && ./evcc`
2. Start frontend dev server: `npm run dev`
3. Access development UI at http://127.0.0.1:7071
### Integration Testing
1. Build application: `make ui build`
2. Run tests: `npm run playwright`
3. Use simulator for device testing: `npm run simulator`