1.9 KiB
1.9 KiB
Plugin System
The plugin system (plugin/) provides protocol-level abstraction for device
communication. Plugins implement typed getter/setter interfaces and are composed
into charger, meter, or vehicle implementations via configuration.
Plugin Types
| Plugin | Protocol | Key Config |
|---|---|---|
http |
HTTP/REST | uri, method, headers, auth, cache, timeout |
mqtt |
MQTT | topic, retained, payload template, timeout |
modbus |
Modbus TCP/RTU | uri, register, scale, baudrate, rtu |
sunspec |
SunSpec/Modbus | Model-based point queries via device tree |
js |
JavaScript/WASM | Inline script evaluation |
go |
Go runtime | Dynamic Go code |
gpio |
Linux GPIO | Digital I/O for relays |
Getter/Setter Interfaces
type StringGetter func() (string, error)
type FloatGetter func() (float64, error)
type IntGetter func() (int64, error)
type BoolGetter func() (bool, error)
// + corresponding Setter types
Pipeline Transforms
Plugins support chained transforms: scale, offset, lookup, regex.
Template-Based Device Configuration
Devices can be defined entirely via YAML templates using plugins:
# templates/definition/charger/example.yaml
status:
source: http
uri: http://{{ .host }}/status
enable:
source: http
uri: http://{{ .host }}/enable
method: POST
maxcurrent:
source: http
uri: http://{{ .host }}/current/{{ .maxcurrent }}
The generic configurable charger (charger/charger.go) wires these plugin
configs into the api.Charger interface at runtime.
Key Files
plugin/config.go— plugin registry and config typesplugin/http.go— HTTP pluginplugin/mqtt.go— MQTT pluginplugin/modbus.go— Modbus pluginplugin/sunspec.go— SunSpec plugincharger/charger.go— generic configurable charger using plugins