|
mqtt: |
|
# https://www.home-assistant.io/integrations/sensor.mqtt |
|
sensor: |
|
# OpenEVSE States |
|
- name: OpenEVSE Temperature |
|
unique_id: FB65CAFA-42AF-4AFC-9754-B11A5AB52C21 |
|
icon: mdi:thermometer |
|
state_topic: "openevse/temp" |
|
device_class: temperature |
|
state_class: measurement |
|
unit_of_measurement: "°C" |
|
value_template: "{{ value|float / 10.0 }}" |
|
expire_after: 40 |
|
- name: OpenEVSE Uptime |
|
unique_id: 55806B85-C3B9-4EF7-8DB3-2E6C28D97669 |
|
icon: mdi:clock |
|
state_topic: "openevse/uptime" |
|
device_class: duration |
|
state_class: measurement |
|
unit_of_measurement: s |
|
value_template: "{{ value|int }}" |
|
expire_after: 40 |
|
- name: OpenEVSE WiFi Signal |
|
unique_id: AEA6EBA8-6B47-455C-BF9F-AA1597B8F80F |
|
state_topic: "openevse/srssi" |
|
device_class: signal_strength |
|
unit_of_measurement: dB |
|
state_class: measurement |
|
value_template: "{{ value|int }}" |
|
expire_after: 40 |
|
- name: OpenEVSE Status |
|
unique_id: 5C6C8534-6CC1-4B8A-9F66-B848473B6C37 |
|
state_topic: "openevse/state" |
|
icon: mdi:information |
|
expire_after: 40 |
|
value_template: >- |
|
{%- if value | regex_match('^[01]$') -%} |
|
Not Connected |
|
{%- elif value | regex_match('^2$') -%} |
|
Connected |
|
{%- elif value | regex_match('^3$') -%} |
|
Charging |
|
{%- elif value | regex_match('^([456789]|10)$') -%} |
|
Error ({{ value }}) |
|
{%- elif value | regex_match('^254$') -%} |
|
Sleeping |
|
{%- elif value | regex_match('^255$') -%} |
|
Disabled |
|
{%- else -%} |
|
Unknown ({{ value }}) |
|
{%- endif -%} |
|
|
|
# OpenEVSE Charge Control |
|
- name: OpenEVSE Charge Pilot Max |
|
unique_id: 870845EB-0C80-499A-964A-42FA9094165D |
|
state_topic: "openevse/max_current" |
|
device_class: current |
|
state_class: measurement |
|
unit_of_measurement: "A" |
|
value_template: "{{ value|int }}" |
|
expire_after: 40 |
|
|
|
# OpenEVSE Meters |
|
- name: OpenEVSE Energy Total |
|
unique_id: 38D03D62-73D2-408C-AF11-7D656267BE36 |
|
state_topic: "openevse/total_energy" |
|
device_class: energy |
|
state_class: total_increasing |
|
unit_of_measurement: "kWh" |
|
value_template: "{{ value|float }}" |
|
- name: OpenEVSE Energy Daily |
|
unique_id: EE072374-3D05-47BC-8F2D-1EFE91744EED |
|
state_topic: "openevse/total_day" |
|
device_class: energy |
|
state_class: total_increasing |
|
unit_of_measurement: "kWh" |
|
value_template: "{{ value|float }}" |
|
- name: OpenEVSE Energy Weekly |
|
unique_id: CB4A849A-E4C7-442F-9F4F-8E80285C0547 |
|
state_topic: "openevse/total_week" |
|
device_class: energy |
|
state_class: total_increasing |
|
unit_of_measurement: "kWh" |
|
value_template: "{{ value|float }}" |
|
- name: OpenEVSE Energy Monthly |
|
unique_id: 137871B7-0C26-4312-8E52-C374339A0EDE |
|
state_topic: "openevse/total_month" |
|
device_class: energy |
|
state_class: total_increasing |
|
unit_of_measurement: "kWh" |
|
value_template: "{{ value|float }}" |
|
- name: OpenEVSE Energy Yearly |
|
unique_id: C16BBC78-C938-4DD0-A67E-17782E078197 |
|
state_topic: "openevse/total_year" |
|
device_class: energy |
|
state_class: total_increasing |
|
unit_of_measurement: "kWh" |
|
value_template: "{{ value|float }}" |
|
- name: OpenEVSE Total Relay Switches |
|
unique_id: 78C1ADAB-6037-4BF8-99F9-50D04391A35E |
|
state_topic: "openevse/total_switches" |
|
state_class: total_increasing |
|
value_template: "{{ value|int }}" |
|
|
|
# OpenEVSE Solar Divert |
|
- name: OpenEVSE Solar Divert Mode |
|
unique_id: C144A777-4BA0-4C1A-882D-EAF130C1F96A |
|
icon: mdi:information |
|
state_topic: "openevse/config" |
|
value_template: "{{ 'Production' if value_json.divert_type == 0 else 'Export' if value_json.divert_type == 1 else 'Unset' }}" |
|
- name: OpenEVSE Solar Divert Grid I/E Power |
|
unique_id: 5F5849C7-9D71-4805-B1AA-1A14B7A225E8 |
|
state_topic: "openevse/grid_ie" |
|
device_class: power |
|
state_class: measurement |
|
unit_of_measurement: W |
|
value_template: "{{ value|float }}" |
|
expire_after: 40 |
|
- name: OpenEVSE Solar Divert Trigger Current |
|
unique_id: 5B796C33-EB58-4ED8-B6CE-FAFF571BC716 |
|
state_topic: "openevse/trigger_current" |
|
device_class: current |
|
state_class: measurement |
|
unit_of_measurement: "A" |
|
value_template: "{{ value|float }}" |
|
expire_after: 40 |
|
- name: OpenEVSE Solar Divert Smoothed Available Current |
|
unique_id: 352FC91A-FAC3-49B8-9F73-A783A53E13B7 |
|
state_topic: "openevse/smoothed_available_current" |
|
device_class: current |
|
state_class: measurement |
|
unit_of_measurement: "A" |
|
value_template: "{{ value|float }}" |
|
expire_after: 40 |
|
- name: OpenEVSE Solar Divert Available Current |
|
unique_id: 01F32597-A7BA-44F7-9316-082864B422F1 |
|
state_topic: "openevse/available_current" |
|
device_class: current |
|
state_class: measurement |
|
unit_of_measurement: "A" |
|
value_template: "{{ value|float }}" |
|
expire_after: 40 |
|
- name: OpenEVSE Solar Divert Charge Pilot |
|
unique_id: E562FDD7-06C4-4352-BA84-32E1F881DA40 |
|
state_topic: "openevse/charge_rate" |
|
device_class: current |
|
state_class: measurement |
|
unit_of_measurement: "A" |
|
value_template: "{{ value|float }}" |
|
expire_after: 40 |
|
- name: OpenEVSE Solar Divert Power Ratio |
|
unique_id: 1F63E35B-A968-4448-80FE-F9D4B86F5408 |
|
state_topic: "openevse/config" |
|
value_template: "{{ value_json.divert_PV_ratio|float if value_json.divert_PV_ratio|is_number else 0 }}" |
|
- name: OpenEVSE Solar Divert Minimum Charging Time |
|
unique_id: 0260723C-AF74-4C2B-9C5D-F21A281AD119 |
|
state_topic: "openevse/config" |
|
device_class: duration |
|
state_class: measurement |
|
unit_of_measurement: "s" |
|
value_template: "{{ value_json.divert_min_charge_time|int if value_json.divert_min_charge_time|is_number else 0 }}" |
|
- name: OpenEVSE Solar Divert Smoothing Attack |
|
unique_id: E948AD52-3A04-452F-A8D7-F91F0D1C2DA8 |
|
state_topic: "openevse/config" |
|
device_class: duration |
|
state_class: measurement |
|
unit_of_measurement: "s" |
|
value_template: "{{ value_json.divert_attack_smoothing_time|int if value_json.divert_attack_smoothing_time|is_number else 0 }}" |
|
- name: OpenEVSE Solar Divert Smoothing Decay |
|
unique_id: 8E661748-5DEF-4E91-A1F1-C6934438A35E |
|
state_topic: "openevse/config" |
|
device_class: duration |
|
state_class: measurement |
|
unit_of_measurement: "s" |
|
value_template: "{{ value_json.divert_decay_smoothing_time|int if value_json.divert_decay_smoothing_time|is_number else 0 }}" |
|
|
|
# OpenEVSE Current Shaper |
|
- name: OpenEVSE Current Shaper Load |
|
unique_id: A8D5640E-6F37-4726-8AA2-C5ED09A547FC |
|
state_topic: "openevse/shaper_live_pwr" |
|
device_class: power |
|
state_class: measurement |
|
unit_of_measurement: "W" |
|
value_template: "{{ [0, value|int] | max }}" |
|
expire_after: 40 |
|
- name: OpenEVSE Current Shaper Free |
|
unique_id: 50589CB6-A283-4C65-AE7A-19BF284B79FA |
|
state_topic: "openevse/shaper_cur" |
|
device_class: current |
|
state_class: measurement |
|
unit_of_measurement: "A" |
|
value_template: "{{ value|float }}" |
|
expire_after: 40 |
|
- name: OpenEVSE Current Shaper Max Power |
|
unique_id: 30705EE3-0E04-4F59-9706-E6CADCD69DE1 |
|
state_topic: "openevse/config" |
|
device_class: power |
|
state_class: measurement |
|
unit_of_measurement: "W" |
|
value_template: "{{ value_json.current_shaper_max_pwr|int if value_json.current_shaper_max_pwr|is_number else 0 }}" |
|
|
|
# OpenEVSE Charge Session |
|
- name: OpenEVSE Charge Session Elapsed |
|
unique_id: 4F1224CE-8D67-4084-BC5D-6DD54344C17E |
|
icon: mdi:clock |
|
state_topic: "openevse/session_elapsed" |
|
device_class: duration |
|
state_class: measurement |
|
unit_of_measurement: "s" |
|
value_template: "{{ value|int }}" |
|
expire_after: 40 |
|
- name: OpenEVSE Charge Session Current |
|
unique_id: F5779F32-60F0-4DD3-A4F9-7C8A61078479 |
|
state_topic: "openevse/amp" |
|
device_class: current |
|
state_class: measurement |
|
unit_of_measurement: "A" |
|
value_template: "{{ value|float / 1000.0 }}" |
|
expire_after: 40 |
|
- name: OpenEVSE Charge Session Power |
|
unique_id: 25B6FF8C-BABF-4BBA-83C3-608C5DF258CE |
|
state_topic: "openevse/power" |
|
device_class: power |
|
state_class: measurement |
|
unit_of_measurement: "W" |
|
value_template: "{{ value|float }}" |
|
expire_after: 40 |
|
- name: OpenEVSE Charge Session Energy |
|
unique_id: E28B246F-9312-4FB6-9DD1-C928E37BB14F |
|
icon: mdi:flash |
|
state_topic: "openevse/session_energy" |
|
device_class: energy |
|
state_class: total_increasing |
|
unit_of_measurement: "kWh" |
|
value_template: "{{ value|float / 1000.0 }}" |
|
expire_after: 40 |
|
|
|
# OpenEVSE Vehicle |
|
- name: OpenEVSE Vehicle Battery Level |
|
unique_id: D339E01F-8D67-4ABC-A7C7-11FB2A2CB137 |
|
state_topic: "openevse/battery_level" |
|
device_class: battery |
|
unit_of_measurement: "%" |
|
icon: mdi:battery |
|
value_template: "{{ value|float }}" |
|
availability_topic: "openevse/battery_level" |
|
availability_template: "{{ 'online' if value|is_number and value|float > 0 else 'offline' }}" |
|
expire_after: 40 |
|
- name: OpenEVSE Vehicle Autonomy |
|
unique_id: 4315ABAE-A084-402E-BE28-2A58D69E1D56 |
|
state_topic: "openevse/battery_range" |
|
device_class: distance |
|
unit_of_measurement: "km" |
|
icon: mdi:sign-direction |
|
value_template: "{{ value|int }}" |
|
availability_topic: "openevse/battery_range" |
|
availability_template: "{{ 'online' if value|is_number and value|int > 0 else 'offline' }}" |
|
expire_after: 40 |
|
- name: OpenEVSE Vehicle Charge Remaining Time |
|
unique_id: 8FF37A72-D238-4BA3-93E3-1FB63C3C884A |
|
state_topic: "openevse/time_to_full_charge" |
|
device_class: duration |
|
unit_of_measurement: "s" |
|
icon: mdi:clock |
|
value_template: "{{ value|int }}" |
|
availability_topic: "openevse/battery_level" |
|
availability_template: "{{ 'online' if value|is_number and value|float > 0 else 'offline' }}" |
|
expire_after: 40 |
|
|
|
# OpenEVSE Config |
|
- name: OpenEVSE Config |
|
unique_id: FD00ADC3-1761-46E0-896D-34252E582413 |
|
state_topic: "openevse/config_version" |
|
value_template: "{{ value|int }}" |
|
json_attributes_topic: "openevse/config" |
|
icon: mdi:information |
|
|
|
# https://www.home-assistant.io/integrations/binary_sensor.mqtt |
|
binary_sensor: |
|
- name: OpenEVSE Solar Divert Allow Charge |
|
unique_id: 703CE4A8-F919-4FCD-A62F-10AED23FA85C |
|
icon: mdi:check-circle |
|
state_topic: "openevse/divert_active" |
|
payload_on: "true" |
|
payload_off: "false" |
|
expire_after: 40 |
|
- name: OpenEVSE Vehicle Connected |
|
unique_id: 38AFB454-9EE7-4FA9-BF7D-93A93351B72B |
|
icon: mdi:ev-plug-type2 |
|
state_topic: "openevse/vehicle" |
|
payload_on: "1" |
|
payload_off: "0" |
|
expire_after: 40 |
|
|
|
# https://www.home-assistant.io/integrations/switch.mqtt/ |
|
switch: |
|
- name: OpenEVSE Solar Divert |
|
unique_id: DBA9BF34-1990-4B45-B5D6-5D4560CD3767 |
|
icon: mdi:solar-panel |
|
state_topic: "openevse/config" |
|
value_template: "{{ 'on' if value_json.divert_enabled else 'off' }}" |
|
command_topic: "openevse/config/set" |
|
state_on: "on" |
|
state_off: "off" |
|
payload_on: '{"divert_enabled":true}' |
|
payload_off: '{"divert_enabled":false}' |
|
- name: OpenEVSE Current Shaper |
|
unique_id: 4B099CDD-398D-489E-8E19-0A419FE297B7 |
|
icon: mdi:car-speed-limiter |
|
state_topic: "openevse/config" |
|
value_template: "{{ 'on' if value_json.current_shaper_enabled else 'off' }}" |
|
command_topic: "openevse/config/set" |
|
state_on: "on" |
|
state_off: "off" |
|
payload_on: '{"current_shaper_enabled":true}' |
|
payload_off: '{"current_shaper_enabled":false}' |
|
|
|
# https://www.home-assistant.io/integrations/select.mqtt/ |
|
select: |
|
# OpenEVSE Charge Control |
|
- name: OpenEVSE Charge Control |
|
unique_id: 356932F4-436F-4C4B-A405-56BF65338E54 |
|
icon: mdi:robot |
|
state_topic: "openevse/manual_override" |
|
command_topic: "openevse/override/set" |
|
options: |
|
- Auto |
|
- Manual |
|
value_template: "{{ 'Manual' if value == '1' else 'Auto' }}" |
|
command_template: >- |
|
{% if value == 'Auto' %} |
|
clear |
|
{% else %} |
|
{"state": "{{'active' if states.select.openevse_charge_status.state == 'Allow Charge' else 'disabled'}}", "charge_current": {{states.number.openevse_charge_pilot.state}}, "auto_release": true} |
|
{% endif %} |
|
- name: OpenEVSE Charge Status |
|
unique_id: C19541CF-1B64-463D-8655-E0CC8ADE8BE6 |
|
icon: mdi:battery-charging |
|
state_topic: "openevse/status" |
|
command_topic: "openevse/override/set" |
|
options: |
|
- Allow Charge |
|
- Pause Charge |
|
value_template: "{{'Allow Charge' if value == 'active' else 'Pause Charge'}}" |
|
command_template: >- |
|
{"state": "{{'active' if value == 'Allow Charge' else 'disabled'}}", "charge_current": {{states.number.openevse_charge_pilot.state}}, "auto_release": true} |
|
- name: OpenEVSE Charge Limit |
|
unique_id: 71271DE5-6AE4-475A-A4F9-F202F922E9C1 |
|
icon: mdi:car-speed-limiter |
|
state_topic: "openevse/limit" |
|
command_topic: "openevse/limit/set" |
|
options: |
|
- No Limit |
|
- Battery 90% |
|
value_template: >- |
|
{{ 'No Limit' if value_json.type == 'none' or value_json.Type == 'none' or value == 'false' else 'Battery 90%' if value_json.type == 'soc' and value_json.value == 90 else states.select.openevse_charge_limit.state if value == 'true' else value }} |
|
command_template: >- |
|
{% if value == 'No Limit' %} |
|
clear |
|
{% else %} |
|
{"type": "soc", "value": 90, "auto_release": true} |
|
{% endif %} |
|
|
|
# https://www.home-assistant.io/integrations/button.mqtt/ |
|
button: |
|
- name: OpenEVSE Restart Gateway |
|
unique_id: 76D7ED73-8131-4FCC-9B3B-CBF482F625F1 |
|
icon: mdi:restart |
|
command_topic: "openevse/restart" |
|
payload_press: '{"device":"gateway"}' |
|
- name: OpenEVSE Restart EVSE |
|
unique_id: 55C77E3B-AD00-4376-B69B-7F7BC4AB8C38 |
|
icon: mdi:restart |
|
command_topic: "openevse/restart" |
|
payload_press: '{"device":"evse"}' |
|
|
|
# https://www.home-assistant.io/integrations/number.mqtt/ |
|
number: |
|
# charge |
|
- name: OpenEVSE Charge Pilot |
|
unique_id: 4A4EE63B-B87A-479D-AF38-8011C710F852 |
|
state_topic: "openevse/pilot" |
|
device_class: current |
|
unit_of_measurement: "A" |
|
value_template: "{{ [32, [6, value|int] | max] | min if value|is_number else 0 }}" |
|
min: 6 |
|
max: 32 |
|
step: 1 |
|
mode: slider |
|
command_topic: "openevse/override/set" |
|
command_template: >- |
|
{"state": "{{'active' if states.select.openevse_charge_status.state == 'Allow Charge' else 'disabled'}}", "charge_current": {{value}}, "auto_release": true} |
|
# evse |
|
- name: OpenEVSE Max Pilot Soft |
|
unique_id: 51E920C1-4C35-437A-947C-81E2B29A384C |
|
state_topic: "openevse/config" |
|
device_class: current |
|
unit_of_measurement: "A" |
|
value_template: >- |
|
{{ value_json.max_current_soft|int if value_json.max_current_soft|is_number else 6 }} |
|
min: 6 |
|
max: 32 |
|
step: 1 |
|
mode: slider |
|
command_topic: "openevse/config/set" |
|
command_template: >- |
|
{"max_current_soft": "{{value}}"} |
|
|
|
# https://www.home-assistant.io/integrations/timer |
|
timer: |
|
openevse_shutdown_detection: |
|
name: "OpenEVSE Shutdown Detection" |
|
|
|
template: |
|
# https://www.home-assistant.io/integrations/binary_sensor |
|
- binary_sensor: |
|
- name: OpenEVSE Gateway |
|
unique_id: 95DFB8A2-5984-4D65-B7AC-05E1DE0F1918 |
|
device_class: running |
|
icon: mdi:ev-station |
|
state: "{{ states.timer.openevse_shutdown_detection.state == 'active' }}" |
|
- name: OpenEVSE Vehicle Charge |
|
unique_id: 4A22FA51-0861-44F9-9C7F-A3328D45DFDD |
|
device_class: battery_charging |
|
state: "{{ states.sensor.openevse_charge_session_power.state|float(0) > 10 }}" |
|
icon: mdi:battery-charging |
|
|
|
script: |
|
openevse_charge_manual: |
|
alias: "OpenEVSE: Charge Manual" |
|
sequence: |
|
- service: select.select_option |
|
data: |
|
option: Manual |
|
target: |
|
entity_id: select.openevse_charge_control |
|
- wait_template: "{{states.select.openevse_charge_control.state == 'Manual'}}" |
|
continue_on_timeout: false |
|
- service: select.select_option |
|
data: |
|
option: Allow Charge |
|
target: |
|
entity_id: select.openevse_charge_status |
|
- wait_template: "{{states.select.openevse_charge_status.state == 'Allow Charge'}}" |
|
continue_on_timeout: false |
|
- service: number.set_value |
|
data: |
|
value: "{{states.number.openevse_max_pilot_soft.state}}" |
|
target: |
|
entity_id: number.openevse_charge_pilot |
|
- service: select.select_option |
|
data: |
|
option: Battery 90% |
|
target: |
|
entity_id: select.openevse_charge_limit |
|
- wait_template: "{{states.select.openevse_charge_limit.state == 'Battery 90%'}}" |
|
continue_on_timeout: false |
|
|
|
openevse_charge_auto: |
|
alias: "OpenEVSE: Charge Auto" |
|
sequence: |
|
- service: select.select_option |
|
data: |
|
option: Auto |
|
target: |
|
entity_id: select.openevse_charge_control |
|
- wait_template: "{{states.select.openevse_charge_control.state == 'Auto'}}" |
|
continue_on_timeout: false |
|
- service: select.select_option |
|
data: |
|
option: No Limit |
|
target: |
|
entity_id: select.openevse_charge_limit |
|
- wait_template: "{{states.select.openevse_charge_limit.state == 'No Limit'}}" |
|
continue_on_timeout: false |
|
|
|
openevse_charge_switch: |
|
alias: "OpenEVSE: Charge Switch" |
|
sequence: |
|
- choose: |
|
- conditions: |
|
- condition: state |
|
entity_id: binary_sensor.openevse_vehicle_charge |
|
state: "on" |
|
sequence: |
|
- service: script.openevse_charge_auto |
|
data: {} |
|
- conditions: |
|
- condition: state |
|
entity_id: binary_sensor.openevse_vehicle_charge |
|
state: "off" |
|
sequence: |
|
- service: script.openevse_charge_manual |
|
data: {} |
|
|
|
automation: |
|
- alias: "OpenEVSE: Keep Alive" |
|
max_exceeded: silent |
|
trigger: |
|
- platform: mqtt |
|
topic: "openevse/uptime" |
|
condition: [] |
|
action: |
|
- service: timer.start |
|
data: |
|
duration: "00:00:40" |
|
target: |
|
entity_id: timer.openevse_shutdown_detection |
|
|
|
- alias: "OpenEVSE: Remove Limit" |
|
max_exceeded: silent |
|
trigger: |
|
- platform: state |
|
entity_id: select.openevse_charge_control |
|
to: "Auto" |
|
condition: [] |
|
action: |
|
- service: select.select_option |
|
data: |
|
option: No Limit |
|
target: |
|
entity_id: select.openevse_charge_limit |
|
- wait_template: "{{states.select.openevse_charge_limit.state == 'No Limit'}}" |
|
continue_on_timeout: false |
|
|
|
# - alias: "OpenEVSE: Switch Soalr Divert" |
|
# max_exceeded: silent |
|
# trigger: |
|
# - platform: state |
|
# entity_id: binary_sensor.openevse_vehicle_connected |
|
# condition: [] |
|
# action: |
|
# - if: |
|
# - condition: state |
|
# entity_id: binary_sensor.openevse_vehicle_connected |
|
# state: "on" |
|
# then: |
|
# - service: switch.turn_on |
|
# data: {} |
|
# target: |
|
# entity_id: switch.openevse_solar_divert |
|
# - service: select.select_option |
|
# data: |
|
# option: Auto |
|
# target: |
|
# entity_id: select.openevse_charge_control |
|
# - wait_template: "{{states.select.openevse_charge_control.state == 'Auto'}}" |
|
# continue_on_timeout: true |
|
# else: |
|
# - service: select.select_option |
|
# data: |
|
# option: Pause Charge |
|
# target: |
|
# entity_id: select.openevse_charge_status |
|
# - wait_template: "{{states.select.openevse_charge_status.state == 'Pause Charge'}}" |
|
# continue_on_timeout: true |
|
# - service: switch.turn_off |
|
# data: {} |
|
# target: |
|
# entity_id: switch.openevse_solar_divert |
|
|
|
logbook: |
|
exclude: |
|
entities: |
|
- automation.openevse_keep_alive |
Yes indeed it works quite nice at the moment, I was using MQTT myself directly but an integration is just easier as it provides all the buttons, switches etc already set.
What I am trying to do at the moment is to implement an alternative to the self-production auto adjustment that is in OpenEvse.
I find it so unreliable and it would make more sense to keep it in HA and leave the wallbox to do only on/off.
I saw yours and I also saw someone else doing that but via OCPP instead of MQTT.