mirror of
https://github.com/Akkudoktor-EOS/EOS.git
synced 2026-11-13 09:13:30 +01:00
The configuration sync of the Home Assistant adapter skipped every value that is false in Python, so an entity state of 0 or off never reached the configuration. It also set any path it was given: the documented example devices/batteries/0/capacity_wh named a device "0" that does not exist, so EOS silently added a new battery with a random device id. Apply every value except an unavailable or unknown entity, and only update settings that exist; report other paths as an error. The example now addresses the battery by its device_id. Signed-off-by: SchaafAlexander <86607129+SchaafAlexander@users.noreply.github.com> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
8.8 KiB
8.8 KiB
Adapter Configuration
:::{table} adapter :widths: 10 20 10 5 5 30 :align: left
| Name | Environment Variable | Type | Read-Only | Default | Description |
|---|---|---|---|---|---|
| homeassistant | EOS_ADAPTER__HOMEASSISTANT |
HomeAssistantAdapterCommonSettings |
rw |
required |
Home Assistant adapter settings. |
| nodered | EOS_ADAPTER__NODERED |
NodeREDAdapterCommonSettings |
rw |
required |
NodeRED adapter settings. |
| provider | EOS_ADAPTER__PROVIDER |
Optional[list[str]] |
rw |
None |
List of adapter provider id(s) of provider(s) to be used. |
| providers | list[str] |
ro |
N/A |
Available adapter provider ids. | |
| ::: |
Example Input
{
"adapter": {
"provider": [
"HomeAssistant"
],
"homeassistant": {
"config_entity_ids": null,
"load_emr_entity_ids": null,
"grid_export_emr_entity_ids": null,
"grid_import_emr_entity_ids": null,
"pv_production_emr_entity_ids": null,
"device_measurement_entity_ids": null,
"device_instruction_entity_ids": null,
"solution_entity_ids": null
},
"nodered": {
"host": "127.0.0.1",
"port": 1880
}
}
}
Example Output
{
"adapter": {
"provider": [
"HomeAssistant"
],
"homeassistant": {
"config_entity_ids": null,
"load_emr_entity_ids": null,
"grid_export_emr_entity_ids": null,
"grid_import_emr_entity_ids": null,
"pv_production_emr_entity_ids": null,
"device_measurement_entity_ids": null,
"device_instruction_entity_ids": null,
"solution_entity_ids": null,
"homeassistant_entity_ids": [],
"eos_solution_entity_ids": [],
"eos_device_instruction_entity_ids": []
},
"nodered": {
"host": "127.0.0.1",
"port": 1880
},
"providers": [
"HomeAssistant",
"NodeRED"
]
}
}
Common settings for the NodeRED adapter
The Node-RED adapter sends to HTTP IN nodes.
This is the example flow:
[HTTP In <URL>] -> [Function (parse payload)] -> [Debug] -> [HTTP Response]
There are two URLs that are used:
- GET /eos/data_aquisition The GET is issued before the optimization.
- POST /eos/control_dispatch The POST is issued after the optimization.
:::{table} adapter::nodered :widths: 10 10 5 5 30 :align: left
| Name | Type | Read-Only | Default | Description |
|---|---|---|---|---|
| host | Optional[str] |
rw |
127.0.0.1 |
Node-RED server IP address. Defaults to 127.0.0.1. |
| port | Optional[int] |
rw |
1880 |
Node-RED server IP port number. Defaults to 1880. |
| ::: |
Example Input/Output
{
"adapter": {
"nodered": {
"host": "127.0.0.1",
"port": 1880
}
}
}
Common settings for the home assistant adapter
:::{table} adapter::homeassistant :widths: 10 10 5 5 30 :align: left
| Name | Type | Read-Only | Default | Description |
|---|---|---|---|---|
| config_entity_ids | Optional[dict[str, str]] |
rw |
None |
Mapping of EOS config keys to Home Assistant entity IDs. |
| The config key has to be given by a ‘/’-separated path | ||||
| e.g. devices/batteries/battery1/capacity_wh | ||||
| Devices are addressed by their device_id. The setting must exist. | ||||
| device_instruction_entity_ids | Optional[list[str]] |
rw |
None |
Entity IDs for device (resource) instructions to be updated by EOS. |
| The device ids (resource ids) have to be prepended by 'sensor.eos_' to build the entity_id. | ||||
| E.g. The instruction for device id 'battery1' becomes the entity_id 'sensor.eos_battery1'. | ||||
| device_measurement_entity_ids | Optional[dict[str, str]] |
rw |
None |
Mapping of EOS device measurement keys to Home Assistant entity IDs. Registered keys such as 'battery1-soc-factor' are accepted; legacy underscore spellings are resolved when they uniquely match a registered key. |
| eos_device_instruction_entity_ids | list[str] |
ro |
N/A |
Entity IDs for energy management instructions available at EOS. |
| eos_solution_entity_ids | list[str] |
ro |
N/A |
Entity IDs for optimization solution available at EOS. |
| grid_export_emr_entity_ids | Optional[list[str]] |
rw |
None |
Entity ID(s) of export to grid energy meter readings [kWh] |
| grid_import_emr_entity_ids | Optional[list[str]] |
rw |
None |
Entity ID(s) of import from grid energy meter readings [kWh] |
| homeassistant_entity_ids | list[str] |
ro |
N/A |
Entity IDs available at Home Assistant. |
| load_emr_entity_ids | Optional[list[str]] |
rw |
None |
Entity ID(s) of load energy meter readings [kWh] |
| pv_production_emr_entity_ids | Optional[list[str]] |
rw |
None |
Entity ID(s) of PV production energy meter readings [kWh] |
| solution_entity_ids | Optional[list[str]] |
rw |
None |
Entity IDs for optimization solution keys to be updated by EOS. |
| The solution keys have to be prepended by 'sensor.eos_' to build the entity_id. | ||||
| E.g. solution key 'battery1_idle_op_mode' becomes the entity_id 'sensor.eos_battery1_idle_op_mode'. | ||||
| ::: |
Example Input
{
"adapter": {
"homeassistant": {
"config_entity_ids": {
"devices/batteries/battery1/capacity_wh": "sensor.battery1_capacity"
},
"load_emr_entity_ids": [
"sensor.load_energy_total_kwh"
],
"grid_export_emr_entity_ids": [
"sensor.grid_export_energy_total_kwh"
],
"grid_import_emr_entity_ids": [
"sensor.grid_import_energy_total_kwh"
],
"pv_production_emr_entity_ids": [
"sensor.pv_energy_total_kwh"
],
"device_measurement_entity_ids": {
"ev11-soc-factor": "sensor.ev11_soc_factor",
"battery1-soc-factor": "sensor.battery1_soc_factor"
},
"device_instruction_entity_ids": [
"sensor.eos_battery1"
],
"solution_entity_ids": [
"sensor.eos_battery1_idle_mode_mode"
]
}
}
}
Example Output
{
"adapter": {
"homeassistant": {
"config_entity_ids": {
"devices/batteries/battery1/capacity_wh": "sensor.battery1_capacity"
},
"load_emr_entity_ids": [
"sensor.load_energy_total_kwh"
],
"grid_export_emr_entity_ids": [
"sensor.grid_export_energy_total_kwh"
],
"grid_import_emr_entity_ids": [
"sensor.grid_import_energy_total_kwh"
],
"pv_production_emr_entity_ids": [
"sensor.pv_energy_total_kwh"
],
"device_measurement_entity_ids": {
"ev11-soc-factor": "sensor.ev11_soc_factor",
"battery1-soc-factor": "sensor.battery1_soc_factor"
},
"device_instruction_entity_ids": [
"sensor.eos_battery1"
],
"solution_entity_ids": [
"sensor.eos_battery1_idle_mode_mode"
],
"homeassistant_entity_ids": [],
"eos_solution_entity_ids": [],
"eos_device_instruction_entity_ids": []
}
}
}