evcm

command module
v0.0.0-...-e05b1bb Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 19, 2023 License: MIT Imports: 8 Imported by: 0

README

Electric Vechicles Charging Management 🔌🍀🚘☀️

Build Status Code Quality Translation Open in Visual Studio Code OSS hosting by cloudsmith Latest Version

EVCM is an extensible EV Charge Controller with PV integration implemented in Go. Featured in PV magazine.

Screenshot

Features

  • simple and clean user interface
  • wide range of supported chargers:
    • ABL eMH1, Alfen (Eve), Bender (CC612/613), cFos (PowerBrain), Daheimladen, Ebee (Wallbox), Ensto (Chago Wallbox), EVSEWifi/ smartWB, Garo (GLB, GLB+, LS4), go-eCharger, HardyBarth (eCB1, cPH1, cPH2), Heidelberg (Energy Control), Innogy (eBox), Juice (Charger Me), KEBA/BMW, Menneckes (Amedio, Amtron Premium/Xtra, Amtron ChargeConrol), NRGkick, openWB (includes Pro), Optec (Mobility One), PC Electric (includes Garo), Siemens, TechniSat (Technivolt), Tinkerforge Warp Charger, Ubitricity (Heinz), Vestel, Wallbe, Webasto (Live), Mobile Charger Connect and many more
    • experimental EEBus support (Elli, PMCC)
    • experimental OCPP support
    • Build-your-own: Phoenix Contact (includes ESL Walli), EVSE DIN
    • Smart-Home outlets: FritzDECT, Shelly, Tasmota, TP-Link
  • wide range of supported meters for grid, pv, battery and charger:
    • ModBus: Eastron SDM, MPM3PM, ORNO WE, SBC ALE3 and many more, see https://github.com/volkszaehler/mbmd#supported-devices for a complete list
    • Integrated systems: SMA Sunny Home Manager and Energy Meter, KOSTAL Smart Energy Meter (KSEM, EMxx)
    • Sunspec-compatible inverter or home battery devices: Fronius, SMA, SolarEdge, KOSTAL, STECA, E3DC, ...
    • and various others: Discovergy, Tesla PowerWall, LG ESS HOME, OpenEMS (FENECON)
  • vehicle integration (state of charge, remote charge, battery and preconditioning status):
    • Audi, BMW, Citroën, Dacia, Fiat, Ford, Hyundai, Jaguar, Kia, Landrover, Mercedes, Mini, Nissan, Opel, Peugeot, Porsche, Renault, Seat, Smart, Skoda, Tesla, Volkswagen, Volvo, ...
    • Services: OVMS, Tronity
    • Scooters: Niu, Silence
  • plugins for integrating with any charger/ meter/ vehicle:
    • Modbus, HTTP, MQTT, Javascript, WebSockets and shell scripts
  • status notifications using Telegram, PushOver and many more
  • logging using InfluxDB and Grafana
  • granular charge power control down to mA steps with supported chargers (labeled by e.g. smartWB as OLC)
  • REST and MQTT APIs for integration with home automation systems
  • Add-ons for HomeAssistant and OpenHAB (not maintained by the evcm core team)

Getting Started

You'll find everything you need in our documentation.

Contribute

To build evcm from source, Go 1.21 and Node 18 are required.

Build and run go backend. The UI becomes available at http://127.0.0.1:7070/

make install-ui
make ui
make install
make
./evcm
UI development

For frontend development start the Vue toolchain in dev-mode. Open http://127.0.0.1:7071/ to get to the livelreloading development server. It pulls its data from port 7070 (see above).

npm install
npm run dev
Integration tests

We use Playwright for end-to-end integration tests. They start a local evcm instance with different configuration yamls and prefilled databases. To run them, you have to do a local build first.

make ui build
npm run playwright
Simulating device state

Since we dont want to run tests agains real devices or cloud services we've build a simple simulator that lets you emulated meters, vehicles and loadpoints. The simulators web interface runs on http://localhost:7072.

npm run simulator

Run an evcm instance that uses simulator data. This configuration runs with a very high refresh interval to seed up testing.

make ui build
./evcm --config tests/simulator.evcm.yaml
Code formatting

We use linters (golangci-lint, Prettier) to keep a coherent source code formatting. It's recommended to use the format-on-save feature of your editor. For VSCode use the Go, Prettier and Veture extension. You can manually reformat your code by running:

make lint
make lint-ui
Changing templates

evcm supports a massive amount of different devices. To keep our documentation and website in sync with the latest software the core project (this repo) generates meta-data that's pushed to the docs and evcm.io repository. Make sure to update this meta-data every time you make changes to a templates.

make docs

If you miss one of the above steps Gitub Actions will likely trigger a Porcelain error.

Adding or modifying translations

evcm already includes many translations for the UI. Weblate Hosted is used to maintain all languages. Feel free to add more languages or verify and edit existing translations. Weblate will automatically push all modifications on a regular base to the evcm repository.

Weblate Hosted Languages

https://hosted.weblate.org/projects/evcm/evcm/

Sponsorship

evcm believes in open source software. We're committed to provide best in class EV charging experience. Maintaining evcm consumes time and effort. With the vast amount of different devices to support, we depend on community and vendor support to keep evcm alive.

While evcm is open source, we would also like to encourage vendors to provide open source hardware devices, public documentation and support open source projects like ours that provide additional value to otherwise closed hardware. Where this is not the case, evcm requires "sponsor token" to finance ongoing development and support of evcm.

The personal sponsor token requires a Github Sponsorship and can be requested at sponsor.evcm.io.

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis
api
cmd
soc
loadpoint
Package loadpoint is a generated GoMock package.
Package loadpoint is a generated GoMock package.
soc
lgpcs
Package lgpcs implements access to the LG pcs device (aka inverter).
Package lgpcs implements access to the LG pcs device (aka inverter).
Package mock is a generated GoMock package.
Package mock is a generated GoMock package.
sma
db
entsoe
Package entsoe implements a minimalized version of the European Network of Transmission System Operators for Electricity's Transparency Platform API (https://transparency.entsoe.eu)
Package entsoe implements a minimalized version of the European Network of Transmission System Operators for Electricity's Transparency Platform API (https://transparency.entsoe.eu)
ngeso
Package ngeso implements the carbonintensity.org.uk Grid CO2 tracking service, which provides CO2 forecasting for the UK at a national and regional level.
Package ngeso implements the carbonintensity.org.uk Grid CO2 tracking service, which provides CO2 forecasting for the UK at a national and regional level.
templates
goversion
Package goversion should only be used as a blank import.
Package goversion should only be used as a blank import.
jq
shortrfc3339
Package shortrfc3339 implements helpers for working with shortened RFC-3339 compliant timestamps (those without seconds).
Package shortrfc3339 implements helpers for working with shortened RFC-3339 compliant timestamps (those without seconds).
urlvalues
Package urlvalues provides functions for working with url.Values
Package urlvalues provides functions for working with url.Values
bmw
jlr
mb
niu
psa
vag
vw

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL