OCPP integration, Node-Red and Teison EV Charger

I think I really need some assistance, I’m trying to set up a Teison EV charger with OCPP and node red.
For the time being I’ve set up basic Home Assistant automations which turn the unit on when solar power export is above 1.3kw and off when consumption is above 0.4kw.

Next I’ve set up a helper that calculates the desired charge rate setting in Amps from the total power export and the current charge rate (with a minimum rate of 6A as that appears to be the chargers minimum).

{% set e = states('sensor.eagle_200_meter_power_demand') | float %}
{% set c = states('sensor.farm_charger_current_import') | float %}
{% if (((e * -1000)/240) + (c -1) )|round(0) > 6 | float %}
{{ (((e * -1000)/240) + (c -1) )|round(0)}}
 {% else %}
            {{6}}
          {% endif %}

Finally i’ve attempted to set up a node-red flow that adjusts the charge rate.

[
    {
        "id": "281a947a8b14ff9e",
        "type": "tab",
        "label": "Teison Charger",
        "disabled": false,
        "info": "",
        "env": []
    },
    {
        "id": "b04e52fda3e61e34",
        "type": "inject",
        "z": "281a947a8b14ff9e",
        "name": "Every 3 minutes",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "180",
        "crontab": "",
        "once": true,
        "onceDelay": "10",
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "x": 130,
        "y": 60,
        "wires": [
            [
                "be9d746797bb56f6"
            ]
        ]
    },
    {
        "id": "be9d746797bb56f6",
        "type": "api-current-state",
        "z": "281a947a8b14ff9e",
        "name": "Nic at home",
        "server": "eab52739.9cf7d8",
        "version": 3,
        "outputs": 2,
        "halt_if": "home",
        "halt_if_type": "str",
        "halt_if_compare": "is",
        "entity_id": "person.nic",
        "state_type": "str",
        "blockInputOverrides": true,
        "outputProperties": [
            {
                "property": "payload",
                "propertyType": "msg",
                "value": "",
                "valueType": "entityState"
            },
            {
                "property": "data",
                "propertyType": "msg",
                "value": "",
                "valueType": "entity"
            }
        ],
        "for": "0",
        "forType": "num",
        "forUnits": "minutes",
        "override_topic": false,
        "state_location": "payload",
        "override_payload": "msg",
        "entity_location": "data",
        "override_data": "msg",
        "x": 330,
        "y": 60,
        "wires": [
            [
                "546711f7015f21f3"
            ],
            [
                "0adfd55bbd68c670"
            ]
        ]
    },
    {
        "id": "0adfd55bbd68c670",
        "type": "api-current-state",
        "z": "281a947a8b14ff9e",
        "name": "Moose at home",
        "server": "eab52739.9cf7d8",
        "version": 3,
        "outputs": 2,
        "halt_if": "home",
        "halt_if_type": "str",
        "halt_if_compare": "is",
        "entity_id": "person.lucy",
        "state_type": "str",
        "blockInputOverrides": true,
        "outputProperties": [
            {
                "property": "payload",
                "propertyType": "msg",
                "value": "",
                "valueType": "entityState"
            },
            {
                "property": "data",
                "propertyType": "msg",
                "value": "",
                "valueType": "entity"
            }
        ],
        "for": "1",
        "forType": "num",
        "forUnits": "minutes",
        "override_topic": false,
        "state_location": "payload",
        "override_payload": "msg",
        "entity_location": "data",
        "override_data": "msg",
        "x": 540,
        "y": 60,
        "wires": [
            [
                "546711f7015f21f3"
            ],
            []
        ]
    },
    {
        "id": "2241e15b5a26e675",
        "type": "api-current-state",
        "z": "281a947a8b14ff9e",
        "name": "Get EV Charge Rate",
        "server": "41108723.0bf848",
        "version": 3,
        "outputs": 1,
        "halt_if": "",
        "halt_if_type": "str",
        "halt_if_compare": "is",
        "entity_id": "sensor.ev_charge_rate",
        "state_type": "str",
        "blockInputOverrides": true,
        "outputProperties": [
            {
                "property": "payload",
                "propertyType": "msg",
                "value": "",
                "valueType": "num"
            },
            {
                "property": "data",
                "propertyType": "msg",
                "value": "",
                "valueType": "entity"
            }
        ],
        "for": "0",
        "forType": "num",
        "forUnits": "minutes",
        "override_topic": false,
        "state_location": "payload",
        "override_payload": "msg",
        "entity_location": "data",
        "override_data": "msg",
        "x": 160,
        "y": 240,
        "wires": [
            [
                "bdb53f1b2c30e860"
            ]
        ]
    },
    {
        "id": "bdb53f1b2c30e860",
        "type": "api-call-service",
        "z": "281a947a8b14ff9e",
        "name": "Set Teison",
        "server": "eab52739.9cf7d8",
        "version": 7,
        "debugenabled": true,
        "action": "ocpp.set_charge_rate",
        "floorId": [],
        "areaId": [],
        "deviceId": [],
        "entityId": [],
        "labelId": [],
        "data": "{\"devid\":\"car_charger\",\"limit_amps\":\"payload\"}",
        "dataType": "jsonata",
        "mergeContext": "",
        "mustacheAltTags": false,
        "outputProperties": [
            {
                "property": "payload",
                "propertyType": "msg",
                "value": "",
                "valueType": "str"
            }
        ],
        "queue": "none",
        "blockInputOverrides": false,
        "domain": "ocpp",
        "service": "set_charge_rate",
        "x": 410,
        "y": 240,
        "wires": [
            []
        ]
    },
    {
        "id": "546711f7015f21f3",
        "type": "api-current-state",
        "z": "281a947a8b14ff9e",
        "name": "Charger is on",
        "server": "eab52739.9cf7d8",
        "version": 3,
        "outputs": 2,
        "halt_if": "on",
        "halt_if_type": "str",
        "halt_if_compare": "is",
        "entity_id": "switch.farm_charger_charge_control",
        "state_type": "str",
        "blockInputOverrides": true,
        "outputProperties": [
            {
                "property": "payload",
                "propertyType": "msg",
                "value": "",
                "valueType": "entityState"
            },
            {
                "property": "data",
                "propertyType": "msg",
                "value": "",
                "valueType": "entity"
            }
        ],
        "for": "0",
        "forType": "num",
        "forUnits": "minutes",
        "override_topic": false,
        "state_location": "payload",
        "override_payload": "msg",
        "entity_location": "data",
        "override_data": "msg",
        "x": 140,
        "y": 160,
        "wires": [
            [
                "2241e15b5a26e675"
            ],
            []
        ]
    },
    {
        "id": "eab52739.9cf7d8",
        "type": "server",
        "name": "Home Assistant",
        "addon": true,
        "rejectUnauthorizedCerts": true,
        "ha_boolean": "",
        "connectionDelay": false,
        "cacheJson": false,
        "heartbeat": false,
        "heartbeatInterval": "",
        "statusSeparator": "",
        "enableGlobalContextStore": false
    },
    {
        "id": "41108723.0bf848",
        "type": "server",
        "name": "Home Assistant",
        "version": 5,
        "addon": true,
        "rejectUnauthorizedCerts": true,
        "ha_boolean": "y|yes|true|on|home|open",
        "connectionDelay": true,
        "cacheJson": true,
        "heartbeat": false,
        "heartbeatInterval": 30,
        "areaSelector": "friendlyName",
        "deviceSelector": "id",
        "entitySelector": "id",
        "statusSeparator": "at: ",
        "statusYear": "hidden",
        "statusMonth": "short",
        "statusDay": "numeric",
        "statusHourCycle": "h23",
        "statusTimeFormat": "h:m",
        "enableGlobalContextStore": true
    }
]

I’m stuck at
1/ the spamming of notifications from the charger
• randomly “Warning: Start transaction failed with response Rejected”
• and regularly “Charger 0312209102324480672 rebooted”
• and “Warning: charger reported Rejected while setting MeterValuesSampledData=Current.Export,Current.Import,Current.Offered,Energy.Active.Export.Interval,Energy.Active.Export.Register,Energy.Active.Import.Interval,Energy.Active.Import.Register,Energy.Reactive.Export.Interval,Energy.Reactive.Export.Register,Energy.Reactive.Import.Interval,Energy.Reactive.Import.Register,Frequency,Power.Active.Export,Power.Active.Import,Power.Factor,Power.Offered,Power.Reactive.Export,Power.Reactive.Import,RPM,SoC,Temperature,Voltage”

2/ My Edit action node in node-red is wrong. I can’t work out how to send the sensor.ev_charge_rate to the charger.

if anyone can assist me I’d be eternally grateful

Nic

I’m still fighting with this a days later.
Removing the OCPP integration and setting it up again hasn’t helped the notification spamming.
HA restart gives me one reboot notification and two “Warning: charger reported Rejected while setting …(and a list of items)”

I can however set the charge rate by adding {“devid”:“55a20831ab993f34d0b2bcde6b5ba5e7”, “limit_amps”:6 }
into the data field in the Edit action node.
I’ve no luck in getting that numerical value to auto set from either an Edit current state node, or by replacing it with any verion of

"{{ states(‘sensor.ev_charge_rate'with_unit=False) }}"

that I can think of.
Googling draws a blank so I’m starting to think this isn’t possible :frowning:

Hey Nic,

Taking a look at what you posted, those nodes you are using is for the NR dashboard and not HA’s. To create entities in HA, install the nodered companion and use the HA entity nodes.

Thanks Mikefila, I’ll have a look at that.
That may make my like easier!

Nic

Ok while those extra nodes are certainly useful (and I’ve added a switch in Home assistant to turn the flow off), I don’t think that’s where my problem is.
I’m using these nodes?


I’m at a loss now as to whether the problem is my charger, the occp integration or the last node in my node red flow.

OCPP integration is spewing errors as well as the ones listed in my first post ie.

The unit of ‘Farm Charger Power Reactive Export’ (sensor.farm_charger_power_reactive_export) changed to ‘kWh’ which can’t be converted to the previously stored unit, ‘var’.
If the historic statistic values have a wrong unit, you can update the units of the old values. The values will not be updated.

I’ve deleted everything and reset it all up.
entries are there in the integration but availability is always off. An I can’t even be sure that the maximum current slider works. The changes aren’t reflected in the Teison app.


In desperation I’ve sent off an email to teison in China to see if they have any insight.
My current node red flow in case anyone has any ideas:

[
    {
        "id": "281a947a8b14ff9e",
        "type": "tab",
        "label": "Teison Charger",
        "disabled": false,
        "info": "",
        "env": []
    },
    {
        "id": "b04e52fda3e61e34",
        "type": "inject",
        "z": "281a947a8b14ff9e",
        "name": "Every5 minutes",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "300",
        "crontab": "",
        "once": true,
        "onceDelay": "7",
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "x": 140,
        "y": 40,
        "wires": [
            [
                "406080253406621f"
            ]
        ]
    },
    {
        "id": "be9d746797bb56f6",
        "type": "api-current-state",
        "z": "281a947a8b14ff9e",
        "name": "Nic at home",
        "server": "eab52739.9cf7d8",
        "version": 3,
        "outputs": 2,
        "halt_if": "home",
        "halt_if_type": "str",
        "halt_if_compare": "is",
        "entity_id": "person.nic",
        "state_type": "str",
        "blockInputOverrides": true,
        "outputProperties": [
            {
                "property": "payload",
                "propertyType": "msg",
                "value": "",
                "valueType": "entityState"
            },
            {
                "property": "data",
                "propertyType": "msg",
                "value": "",
                "valueType": "entity"
            }
        ],
        "for": "0",
        "forType": "num",
        "forUnits": "minutes",
        "override_topic": false,
        "state_location": "payload",
        "override_payload": "msg",
        "entity_location": "data",
        "override_data": "msg",
        "x": 190,
        "y": 340,
        "wires": [
            [
                "1423975b62f3ec1d"
            ],
            [
                "0adfd55bbd68c670"
            ]
        ]
    },
    {
        "id": "0adfd55bbd68c670",
        "type": "api-current-state",
        "z": "281a947a8b14ff9e",
        "name": "Moose at home",
        "server": "eab52739.9cf7d8",
        "version": 3,
        "outputs": 2,
        "halt_if": "home",
        "halt_if_type": "str",
        "halt_if_compare": "is",
        "entity_id": "person.lucy",
        "state_type": "str",
        "blockInputOverrides": true,
        "outputProperties": [
            {
                "property": "payload",
                "propertyType": "msg",
                "value": "",
                "valueType": "entityState"
            },
            {
                "property": "data",
                "propertyType": "msg",
                "value": "",
                "valueType": "entity"
            }
        ],
        "for": "1",
        "forType": "num",
        "forUnits": "minutes",
        "override_topic": false,
        "state_location": "payload",
        "override_payload": "msg",
        "entity_location": "data",
        "override_data": "msg",
        "x": 200,
        "y": 400,
        "wires": [
            [
                "1423975b62f3ec1d"
            ],
            []
        ]
    },
    {
        "id": "2241e15b5a26e675",
        "type": "api-current-state",
        "z": "281a947a8b14ff9e",
        "name": "Get EV Charge Rate",
        "server": "eab52739.9cf7d8",
        "version": 3,
        "outputs": 1,
        "halt_if": "",
        "halt_if_type": "str",
        "halt_if_compare": "is",
        "entity_id": "sensor.ev_charge_rate",
        "state_type": "str",
        "blockInputOverrides": true,
        "outputProperties": [
            {
                "property": "payload",
                "propertyType": "msg",
                "value": "",
                "valueType": "num"
            },
            {
                "property": "data",
                "propertyType": "msg",
                "value": "",
                "valueType": "entityState"
            }
        ],
        "for": "0",
        "forType": "num",
        "forUnits": "minutes",
        "override_topic": false,
        "state_location": "payload",
        "override_payload": "msg",
        "entity_location": "data",
        "override_data": "msg",
        "x": 720,
        "y": 340,
        "wires": [
            [
                "7f5b755775e57eb5"
            ]
        ]
    },
    {
        "id": "546711f7015f21f3",
        "type": "api-current-state",
        "z": "281a947a8b14ff9e",
        "name": "Charger is on",
        "server": "eab52739.9cf7d8",
        "version": 3,
        "outputs": 2,
        "halt_if": "on",
        "halt_if_type": "str",
        "halt_if_compare": "is",
        "entity_id": "switch.farm_charger_charge_control",
        "state_type": "str",
        "blockInputOverrides": true,
        "outputProperties": [
            {
                "property": "payload",
                "propertyType": "msg",
                "value": "",
                "valueType": "entityState"
            },
            {
                "property": "data",
                "propertyType": "msg",
                "value": "",
                "valueType": "entity"
            }
        ],
        "for": "10",
        "forType": "num",
        "forUnits": "minutes",
        "override_topic": false,
        "state_location": "payload",
        "override_payload": "msg",
        "entity_location": "data",
        "override_data": "msg",
        "x": 700,
        "y": 100,
        "wires": [
            [
                "023c2c1ddbf330e0"
            ],
            []
        ]
    },
    {
        "id": "97341dd6b4761506",
        "type": "server-state-changed",
        "z": "281a947a8b14ff9e",
        "name": "Charger turns on",
        "server": "eab52739.9cf7d8",
        "version": 6,
        "outputs": 2,
        "exposeAsEntityConfig": "",
        "entities": {
            "entity": [
                "switch.farm_charger_charge_control"
            ],
            "substring": [],
            "regex": []
        },
        "outputInitially": false,
        "stateType": "str",
        "ifState": "on",
        "ifStateType": "str",
        "ifStateOperator": "is",
        "outputOnlyOnStateChange": true,
        "for": "0",
        "forType": "num",
        "forUnits": "minutes",
        "ignorePrevStateNull": false,
        "ignorePrevStateUnknown": false,
        "ignorePrevStateUnavailable": false,
        "ignoreCurrentStateUnknown": false,
        "ignoreCurrentStateUnavailable": false,
        "outputProperties": [
            {
                "property": "payload",
                "propertyType": "msg",
                "value": "",
                "valueType": "entityState"
            },
            {
                "property": "data",
                "propertyType": "msg",
                "value": "",
                "valueType": "eventData"
            },
            {
                "property": "topic",
                "propertyType": "msg",
                "value": "",
                "valueType": "triggerId"
            }
        ],
        "x": 120,
        "y": 460,
        "wires": [
            [],
            [
                "2241e15b5a26e675"
            ]
        ]
    },
    {
        "id": "2bed658ce98f76de",
        "type": "api-current-state",
        "z": "281a947a8b14ff9e",
        "name": "Power to grid >1.3kw",
        "server": "eab52739.9cf7d8",
        "version": 3,
        "outputs": 2,
        "halt_if": "-1.3",
        "halt_if_type": "num",
        "halt_if_compare": "lt",
        "entity_id": "sensor.eagle_200_meter_power_demand",
        "state_type": "str",
        "blockInputOverrides": true,
        "outputProperties": [
            {
                "property": "payload",
                "propertyType": "msg",
                "value": "",
                "valueType": "entityState"
            },
            {
                "property": "data",
                "propertyType": "msg",
                "value": "",
                "valueType": "entity"
            }
        ],
        "for": "5",
        "forType": "num",
        "forUnits": "minutes",
        "override_topic": false,
        "state_location": "payload",
        "override_payload": "msg",
        "entity_location": "data",
        "override_data": "msg",
        "x": 220,
        "y": 260,
        "wires": [
            [
                "be9d746797bb56f6"
            ],
            []
        ]
    },
    {
        "id": "fecd5dd9420b0abd",
        "type": "api-current-state",
        "z": "281a947a8b14ff9e",
        "name": "Power from grid >400w",
        "server": "eab52739.9cf7d8",
        "version": 3,
        "outputs": 2,
        "halt_if": "0.4",
        "halt_if_type": "num",
        "halt_if_compare": "gt",
        "entity_id": "sensor.eagle_200_meter_power_demand",
        "state_type": "str",
        "blockInputOverrides": true,
        "outputProperties": [
            {
                "property": "payload",
                "propertyType": "msg",
                "value": "",
                "valueType": "entityState"
            },
            {
                "property": "data",
                "propertyType": "msg",
                "value": "",
                "valueType": "entity"
            }
        ],
        "for": "5",
        "forType": "num",
        "forUnits": "minutes",
        "override_topic": false,
        "state_location": "payload",
        "override_payload": "msg",
        "entity_location": "data",
        "override_data": "msg",
        "x": 450,
        "y": 100,
        "wires": [
            [
                "546711f7015f21f3"
            ],
            [
                "1f77c33eaa965a41"
            ]
        ]
    },
    {
        "id": "023c2c1ddbf330e0",
        "type": "ha-device",
        "z": "281a947a8b14ff9e",
        "name": "Turn off charger",
        "server": "eab52739.9cf7d8",
        "version": 1,
        "exposeAsEntityConfig": "",
        "inputs": 1,
        "deviceType": "action",
        "device": "55a20831ab993f34d0b2bcde6b5ba5e7",
        "event": {
            "type": "turn_off",
            "device_id": "55a20831ab993f34d0b2bcde6b5ba5e7",
            "entity_id": "fa49c73ef9966ebf3ef60565ff509f84",
            "domain": "switch",
            "metadata": {
                "secondary": false
            }
        },
        "capabilities": [],
        "outputProperties": [],
        "x": 760,
        "y": 180,
        "wires": [
            []
        ]
    },
    {
        "id": "1423975b62f3ec1d",
        "type": "ha-device",
        "z": "281a947a8b14ff9e",
        "name": "Turn on charger",
        "server": "eab52739.9cf7d8",
        "version": 1,
        "exposeAsEntityConfig": "",
        "inputs": 1,
        "deviceType": "action",
        "device": "55a20831ab993f34d0b2bcde6b5ba5e7",
        "event": {
            "type": "turn_on",
            "device_id": "55a20831ab993f34d0b2bcde6b5ba5e7",
            "entity_id": "fa49c73ef9966ebf3ef60565ff509f84",
            "domain": "switch",
            "metadata": {
                "secondary": false
            }
        },
        "capabilities": [],
        "outputProperties": [],
        "x": 420,
        "y": 340,
        "wires": [
            [
                "2241e15b5a26e675"
            ]
        ]
    },
    {
        "id": "1f77c33eaa965a41",
        "type": "api-current-state",
        "z": "281a947a8b14ff9e",
        "name": "Charger is on",
        "server": "eab52739.9cf7d8",
        "version": 3,
        "outputs": 2,
        "halt_if": "on",
        "halt_if_type": "str",
        "halt_if_compare": "is",
        "entity_id": "switch.farm_charger_charge_control",
        "state_type": "str",
        "blockInputOverrides": true,
        "outputProperties": [
            {
                "property": "payload",
                "propertyType": "msg",
                "value": "",
                "valueType": "entityState"
            },
            {
                "property": "data",
                "propertyType": "msg",
                "value": "",
                "valueType": "entity"
            }
        ],
        "for": "",
        "forType": "num",
        "forUnits": "minutes",
        "override_topic": false,
        "state_location": "payload",
        "override_payload": "msg",
        "entity_location": "data",
        "override_data": "msg",
        "x": 200,
        "y": 180,
        "wires": [
            [
                "bc46c325fcf72e1d"
            ],
            [
                "2bed658ce98f76de"
            ]
        ]
    },
    {
        "id": "406080253406621f",
        "type": "ha-switch",
        "z": "281a947a8b14ff9e",
        "name": "Car Charge Automation",
        "version": 0,
        "debugenabled": false,
        "inputs": 1,
        "outputs": 2,
        "entityConfig": "c91796e35b7292cb",
        "enableInput": true,
        "outputOnStateChange": true,
        "outputProperties": [
            {
                "property": "outputType",
                "propertyType": "msg",
                "value": "state change",
                "valueType": "str"
            },
            {
                "property": "payload",
                "propertyType": "msg",
                "value": "",
                "valueType": "entityState"
            }
        ],
        "x": 220,
        "y": 100,
        "wires": [
            [
                "fecd5dd9420b0abd"
            ],
            []
        ]
    },
    {
        "id": "7f5b755775e57eb5",
        "type": "api-call-service",
        "z": "281a947a8b14ff9e",
        "name": "Set Teison",
        "server": "eab52739.9cf7d8",
        "version": 7,
        "debugenabled": true,
        "action": "ocpp.set_charge_rate",
        "floorId": [],
        "areaId": [],
        "deviceId": [],
        "entityId": [],
        "labelId": [],
        "data": "{\t   \"devid\":\"55a20831ab993f34d0b2bcde6b5ba5e7\",\t   \"limit_amps\":sensor.ev_charge_rate,\t   \"conn_id\":0,\t   \"custom_profile\":\"{\\\"chargingProfileId\\\":8,\\\"stackLevel\\\":0,\\\"chargingProfileKind\\\":\\\"Relative\\\",\t   \\\"chargingProfilePurpose\\\":\\\"ChargePointMaxProfile\\\",\\\"chargingSchedule\\\":{\\\"chargingRateUnit\\\":\\\"A\\\",\t   \\\"chargingSchedulePeriod\\\":[{\\\"startPeriod\\\":0,\\\"limit\\\":16}]}}\"\t}",
        "dataType": "jsonata",
        "mergeContext": "",
        "mustacheAltTags": false,
        "outputProperties": [
            {
                "property": "payload",
                "propertyType": "msg",
                "value": "data",
                "valueType": "msg"
            }
        ],
        "queue": "none",
        "blockInputOverrides": true,
        "domain": "ocpp",
        "service": "set_charge_rate",
        "x": 770,
        "y": 460,
        "wires": [
            []
        ]
    },
    {
        "id": "bc46c325fcf72e1d",
        "type": "api-current-state",
        "z": "281a947a8b14ff9e",
        "name": "Is Car Charging?",
        "server": "eab52739.9cf7d8",
        "version": 3,
        "outputs": 2,
        "halt_if": "1",
        "halt_if_type": "num",
        "halt_if_compare": "gt",
        "entity_id": "sensor.farm_charger_current_import",
        "state_type": "str",
        "blockInputOverrides": true,
        "outputProperties": [
            {
                "property": "payload",
                "propertyType": "msg",
                "value": "",
                "valueType": "entityState"
            },
            {
                "property": "data",
                "propertyType": "msg",
                "value": "",
                "valueType": "entity"
            }
        ],
        "for": "0",
        "forType": "num",
        "forUnits": "minutes",
        "override_topic": false,
        "state_location": "payload",
        "override_payload": "msg",
        "entity_location": "data",
        "override_data": "msg",
        "x": 470,
        "y": 180,
        "wires": [
            [
                "2241e15b5a26e675"
            ],
            []
        ]
    },
    {
        "id": "eab52739.9cf7d8",
        "type": "server",
        "name": "Home Assistant",
        "addon": true,
        "rejectUnauthorizedCerts": true,
        "ha_boolean": "",
        "connectionDelay": false,
        "cacheJson": false,
        "heartbeat": false,
        "heartbeatInterval": "",
        "statusSeparator": "",
        "enableGlobalContextStore": false
    },
    {
        "id": "c91796e35b7292cb",
        "type": "ha-entity-config",
        "server": "eab52739.9cf7d8",
        "deviceConfig": "",
        "name": "car_charge_automation",
        "version": 6,
        "entityType": "switch",
        "haConfig": [
            {
                "property": "name",
                "value": "Car Charge Automation"
            },
            {
                "property": "icon",
                "value": "mdi:car"
            },
            {
                "property": "entity_picture",
                "value": ""
            },
            {
                "property": "entity_category",
                "value": "config"
            },
            {
                "property": "device_class",
                "value": "switch"
            }
        ],
        "resend": false,
        "debugEnabled": false
    }
]

I’m still fighting with this charger and I’m at a loss now as to what to do next.
Is anyone able to give me a hint as to whether these settings look right?
the charger still does not respond to the changes

I looked through the ocpp docs and cannot find an example of the action. The section labeled data needs to be filled out. Do you have a yaml example of how to use this action?

Edit: If you can’t find an example go to dev tools → actions. Choose the ocpp action. Take a screenshot of the fields the editor shows.

Thanks Mike, that may be the extra info I needed.
Here is the screenshot of the dev tools → actions (i didn’t know about that)

I’ve added {"devid":"55a20831ab993f34d0b2bcde6b5ba5e7", "limit_amps”:payload } to the data section
debug shows this:
`18/04/2025, 1:31:04 pmSet Teisonmsg :
object
domain: “ocpp”
service: “set_charge_rate”
target: object
data: object
devid: “55a20831ab993f34d0b2bcde6b5ba5e7”
limit_amps: “9”
18/04/2025, 1:31:05 pmnode: debug 1
msg.payload : string[1]
“9”

`I think it’s working!
I’ll monitor it for the next few days and see how it goes.
-Nic

A final update to this in case anyone else wants to set up a node-red EV charge controller. I’m new to this and had a lot of trouble getting the information.
I had some problems where the OCPP integration was messing up after sending a charge rate 0 (pausing charging rather than switching it off).
The unit could not recover and would not report values.
The OCPP dev suggested:

Your charger supports more metervalues that it can handle.
Disable automatic discovery of metavalues and just select the metavalues you need.
Probably 4-5 should be enough :slight_smile:
I removed the OCPP integration and re added it with only a couple if meta values
That fixed that issue.

Hy helper template looks like this:

{% set e = states('sensor.eagle_200_meter_power_demand') | float %}
{% set c = states('sensor.farm_charger_current_import') | float %}
{% if (((e * -1000)/240) + (c -0) )|round(0) > 5 | float %}
  {{ (((e * -1000)/240) + (c -0) )|round(0)}}
{% else %} 
  {{0}}
{% endif %}

I’m sure it’s unnecessarily complex, but I’m a beginner at this.
I’ve left in the (c -0) . It was set at -1 to leave a little headroom in the power to grid but it’s winter now and I need all the charge I can get for the car.
I may change it back to -1 in summer.

Here is the working node-red flow:


[
    {
        "id": "281a947a8b14ff9e",
        "type": "tab",
        "label": "Teison Charger",
        "disabled": false,
        "info": "",
        "env": []
    },
    {
        "id": "b04e52fda3e61e34",
        "type": "inject",
        "z": "281a947a8b14ff9e",
        "name": "Every 10 minutes",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "600",
        "crontab": "",
        "once": true,
        "onceDelay": "7",
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "x": 150,
        "y": 100,
        "wires": [
            [
                "406080253406621f"
            ]
        ]
    },
    {
        "id": "be9d746797bb56f6",
        "type": "api-current-state",
        "z": "281a947a8b14ff9e",
        "name": "[Person1] at home",
        "server": "eab52739.9cf7d8",
        "version": 3,
        "outputs": 2,
        "halt_if": "home",
        "halt_if_type": "str",
        "halt_if_compare": "is",
        "entity_id": "person.[Person1]",
        "state_type": "str",
        "blockInputOverrides": true,
        "outputProperties": [
            {
                "property": "payload",
                "propertyType": "msg",
                "value": "",
                "valueType": "entityState"
            },
            {
                "property": "data",
                "propertyType": "msg",
                "value": "",
                "valueType": "entity"
            }
        ],
        "for": "0",
        "forType": "num",
        "forUnits": "minutes",
        "override_topic": false,
        "state_location": "payload",
        "override_payload": "msg",
        "entity_location": "data",
        "override_data": "msg",
        "x": 190,
        "y": 420,
        "wires": [
            [
                "1423975b62f3ec1d"
            ],
            [
                "0adfd55bbd68c670"
            ]
        ]
    },
    {
        "id": "0adfd55bbd68c670",
        "type": "api-current-state",
        "z": "281a947a8b14ff9e",
        "name": "[Person2] at home",
        "server": "eab52739.9cf7d8",
        "version": 3,
        "outputs": 2,
        "halt_if": "home",
        "halt_if_type": "str",
        "halt_if_compare": "is",
        "entity_id": "person.[Person2]",
        "state_type": "str",
        "blockInputOverrides": true,
        "outputProperties": [
            {
                "property": "payload",
                "propertyType": "msg",
                "value": "",
                "valueType": "entityState"
            },
            {
                "property": "data",
                "propertyType": "msg",
                "value": "",
                "valueType": "entity"
            }
        ],
        "for": "1",
        "forType": "num",
        "forUnits": "minutes",
        "override_topic": false,
        "state_location": "payload",
        "override_payload": "msg",
        "entity_location": "data",
        "override_data": "msg",
        "x": 200,
        "y": 480,
        "wires": [
            [
                "1423975b62f3ec1d"
            ],
            []
        ]
    },
    {
        "id": "2241e15b5a26e675",
        "type": "api-current-state",
        "z": "281a947a8b14ff9e",
        "name": "Get EV Charge Rate",
        "server": "eab52739.9cf7d8",
        "version": 3,
        "outputs": 1,
        "halt_if": "",
        "halt_if_type": "str",
        "halt_if_compare": "is",
        "entity_id": "sensor.ev_charge_rate",
        "state_type": "str",
        "blockInputOverrides": true,
        "outputProperties": [
            {
                "property": "payload",
                "propertyType": "msg",
                "value": "",
                "valueType": "entityState"
            },
            {
                "property": "data",
                "propertyType": "msg",
                "value": "",
                "valueType": "entity"
            }
        ],
        "for": "0",
        "forType": "num",
        "forUnits": "minutes",
        "override_topic": false,
        "state_location": "payload",
        "override_payload": "msg",
        "entity_location": "data",
        "override_data": "msg",
        "x": 720,
        "y": 420,
        "wires": [
            [
                "7f5b755775e57eb5"
            ]
        ]
    },
    {
        "id": "546711f7015f21f3",
        "type": "api-current-state",
        "z": "281a947a8b14ff9e",
        "name": "Charger is on",
        "server": "eab52739.9cf7d8",
        "version": 3,
        "outputs": 2,
        "halt_if": "on",
        "halt_if_type": "str",
        "halt_if_compare": "is",
        "entity_id": "switch.farm_charger_charge_control",
        "state_type": "str",
        "blockInputOverrides": true,
        "outputProperties": [
            {
                "property": "payload",
                "propertyType": "msg",
                "value": "",
                "valueType": "entityState"
            },
            {
                "property": "data",
                "propertyType": "msg",
                "value": "",
                "valueType": "entity"
            }
        ],
        "for": "10",
        "forType": "num",
        "forUnits": "minutes",
        "override_topic": false,
        "state_location": "payload",
        "override_payload": "msg",
        "entity_location": "data",
        "override_data": "msg",
        "x": 740,
        "y": 260,
        "wires": [
            [
                "023c2c1ddbf330e0"
            ],
            []
        ]
    },
    {
        "id": "97341dd6b4761506",
        "type": "server-state-changed",
        "z": "281a947a8b14ff9e",
        "name": "Charger turns on",
        "server": "eab52739.9cf7d8",
        "version": 6,
        "outputs": 2,
        "exposeAsEntityConfig": "",
        "entities": {
            "entity": [
                "switch.farm_charger_charge_control"
            ],
            "substring": [],
            "regex": []
        },
        "outputInitially": false,
        "stateType": "str",
        "ifState": "on",
        "ifStateType": "str",
        "ifStateOperator": "is",
        "outputOnlyOnStateChange": true,
        "for": "0",
        "forType": "num",
        "forUnits": "minutes",
        "ignorePrevStateNull": false,
        "ignorePrevStateUnknown": false,
        "ignorePrevStateUnavailable": false,
        "ignoreCurrentStateUnknown": false,
        "ignoreCurrentStateUnavailable": false,
        "outputProperties": [
            {
                "property": "payload",
                "propertyType": "msg",
                "value": "",
                "valueType": "entityState"
            },
            {
                "property": "data",
                "propertyType": "msg",
                "value": "",
                "valueType": "eventData"
            },
            {
                "property": "topic",
                "propertyType": "msg",
                "value": "",
                "valueType": "triggerId"
            }
        ],
        "x": 120,
        "y": 540,
        "wires": [
            [],
            [
                "2241e15b5a26e675"
            ]
        ]
    },
    {
        "id": "2bed658ce98f76de",
        "type": "api-current-state",
        "z": "281a947a8b14ff9e",
        "name": "Power to grid >1.3kw",
        "server": "eab52739.9cf7d8",
        "version": 3,
        "outputs": 2,
        "halt_if": "-1.3",
        "halt_if_type": "num",
        "halt_if_compare": "lt",
        "entity_id": "sensor.eagle_200_meter_power_demand",
        "state_type": "str",
        "blockInputOverrides": true,
        "outputProperties": [
            {
                "property": "payload",
                "propertyType": "msg",
                "value": "",
                "valueType": "entityState"
            },
            {
                "property": "data",
                "propertyType": "msg",
                "value": "",
                "valueType": "entity"
            }
        ],
        "for": "5",
        "forType": "num",
        "forUnits": "minutes",
        "override_topic": false,
        "state_location": "payload",
        "override_payload": "msg",
        "entity_location": "data",
        "override_data": "msg",
        "x": 220,
        "y": 340,
        "wires": [
            [
                "be9d746797bb56f6"
            ],
            []
        ]
    },
    {
        "id": "fecd5dd9420b0abd",
        "type": "api-current-state",
        "z": "281a947a8b14ff9e",
        "name": "Power from grid >400w",
        "server": "eab52739.9cf7d8",
        "version": 3,
        "outputs": 2,
        "halt_if": "0.4",
        "halt_if_type": "num",
        "halt_if_compare": "gt",
        "entity_id": "sensor.eagle_200_meter_power_demand",
        "state_type": "str",
        "blockInputOverrides": true,
        "outputProperties": [
            {
                "property": "payload",
                "propertyType": "msg",
                "value": "",
                "valueType": "entityState"
            },
            {
                "property": "data",
                "propertyType": "msg",
                "value": "",
                "valueType": "entity"
            }
        ],
        "for": "5",
        "forType": "num",
        "forUnits": "minutes",
        "override_topic": false,
        "state_location": "payload",
        "override_payload": "msg",
        "entity_location": "data",
        "override_data": "msg",
        "x": 510,
        "y": 180,
        "wires": [
            [
                "9ed59e0b91e3c67e"
            ],
            []
        ]
    },
    {
        "id": "023c2c1ddbf330e0",
        "type": "ha-device",
        "z": "281a947a8b14ff9e",
        "name": "Turn off charger",
        "server": "eab52739.9cf7d8",
        "version": 1,
        "exposeAsEntityConfig": "",
        "inputs": 1,
        "deviceType": "action",
        "device": "55a20831ab993f34d0b2bcde6b5ba5e7",
        "event": {
            "type": "turn_off",
            "device_id": "55a20831ab993f34d0b2bcde6b5ba5e7",
            "entity_id": "1a1d70ebb349a3b893dbd434306295de",
            "domain": "switch",
            "metadata": {
                "secondary": false
            }
        },
        "capabilities": [],
        "outputProperties": [],
        "x": 900,
        "y": 340,
        "wires": [
            []
        ]
    },
    {
        "id": "1423975b62f3ec1d",
        "type": "ha-device",
        "z": "281a947a8b14ff9e",
        "name": "Turn on charger",
        "server": "eab52739.9cf7d8",
        "version": 1,
        "exposeAsEntityConfig": "",
        "inputs": 1,
        "deviceType": "action",
        "device": "55a20831ab993f34d0b2bcde6b5ba5e7",
        "event": {
            "type": "turn_on",
            "device_id": "55a20831ab993f34d0b2bcde6b5ba5e7",
            "entity_id": "1a1d70ebb349a3b893dbd434306295de",
            "domain": "switch",
            "metadata": {
                "secondary": false
            }
        },
        "capabilities": [],
        "outputProperties": [],
        "x": 440,
        "y": 420,
        "wires": [
            [
                "2241e15b5a26e675"
            ]
        ]
    },
    {
        "id": "1f77c33eaa965a41",
        "type": "api-current-state",
        "z": "281a947a8b14ff9e",
        "name": "Charger is on",
        "server": "eab52739.9cf7d8",
        "version": 3,
        "outputs": 2,
        "halt_if": "on",
        "halt_if_type": "str",
        "halt_if_compare": "is",
        "entity_id": "switch.farm_charger_charge_control",
        "state_type": "str",
        "blockInputOverrides": true,
        "outputProperties": [
            {
                "property": "payload",
                "propertyType": "msg",
                "value": "",
                "valueType": "entityState"
            },
            {
                "property": "data",
                "propertyType": "msg",
                "value": "",
                "valueType": "entity"
            }
        ],
        "for": "",
        "forType": "num",
        "forUnits": "minutes",
        "override_topic": false,
        "state_location": "payload",
        "override_payload": "msg",
        "entity_location": "data",
        "override_data": "msg",
        "x": 200,
        "y": 260,
        "wires": [
            [
                "2241e15b5a26e675"
            ],
            [
                "2bed658ce98f76de"
            ]
        ]
    },
    {
        "id": "406080253406621f",
        "type": "ha-switch",
        "z": "281a947a8b14ff9e",
        "name": "Car Charge Automation",
        "version": 0,
        "debugenabled": false,
        "inputs": 1,
        "outputs": 2,
        "entityConfig": "c91796e35b7292cb",
        "enableInput": true,
        "outputOnStateChange": true,
        "outputProperties": [
            {
                "property": "outputType",
                "propertyType": "msg",
                "value": "state change",
                "valueType": "str"
            },
            {
                "property": "payload",
                "propertyType": "msg",
                "value": "",
                "valueType": "entityState"
            }
        ],
        "x": 220,
        "y": 180,
        "wires": [
            [
                "fecd5dd9420b0abd",
                "1f77c33eaa965a41"
            ],
            []
        ]
    },
    {
        "id": "7f5b755775e57eb5",
        "type": "api-call-service",
        "z": "281a947a8b14ff9e",
        "name": "Set Teison",
        "server": "eab52739.9cf7d8",
        "version": 7,
        "debugenabled": true,
        "action": "ocpp.set_charge_rate",
        "floorId": [],
        "areaId": [],
        "deviceId": [],
        "entityId": [],
        "labelId": [],
        "data": "{\"devid\":\"55a20831ab993f34d0b2bcde6b5ba5e7\", \"limit_amps\":payload}",
        "dataType": "jsonata",
        "mergeContext": "",
        "mustacheAltTags": false,
        "outputProperties": [],
        "queue": "none",
        "blockInputOverrides": false,
        "domain": "ocpp",
        "service": "set_charge_rate",
        "x": 890,
        "y": 540,
        "wires": [
            []
        ]
    },
    {
        "id": "9ed59e0b91e3c67e",
        "type": "time-range-switch",
        "z": "281a947a8b14ff9e",
        "name": "",
        "lat": "",
        "lon": "",
        "startTime": "18:00",
        "endTime": "23:00",
        "startOffset": 0,
        "endOffset": 0,
        "x": 750,
        "y": 180,
        "wires": [
            [
                "546711f7015f21f3"
            ],
            []
        ]
    },
    {
        "id": "095847d601137060",
        "type": "server-state-changed",
        "z": "281a947a8b14ff9e",
        "name": "[Person1] arrives home",
        "server": "eab52739.9cf7d8",
        "version": 6,
        "outputs": 2,
        "exposeAsEntityConfig": "",
        "entities": {
            "entity": [
                "person.[Person1]"
            ],
            "substring": [],
            "regex": []
        },
        "outputInitially": false,
        "stateType": "str",
        "ifState": "home",
        "ifStateType": "str",
        "ifStateOperator": "is",
        "outputOnlyOnStateChange": false,
        "for": "10",
        "forType": "num",
        "forUnits": "minutes",
        "ignorePrevStateNull": false,
        "ignorePrevStateUnknown": false,
        "ignorePrevStateUnavailable": false,
        "ignoreCurrentStateUnknown": false,
        "ignoreCurrentStateUnavailable": false,
        "outputProperties": [
            {
                "property": "payload",
                "propertyType": "msg",
                "value": "",
                "valueType": "entityState"
            },
            {
                "property": "data",
                "propertyType": "msg",
                "value": "",
                "valueType": "eventData"
            },
            {
                "property": "topic",
                "propertyType": "msg",
                "value": "",
                "valueType": "triggerId"
            }
        ],
        "x": 400,
        "y": 100,
        "wires": [
            [
                "406080253406621f"
            ],
            []
        ]
    },
    {
        "id": "eab52739.9cf7d8",
        "type": "server",
        "name": "Home Assistant",
        "addon": true,
        "rejectUnauthorizedCerts": true,
        "ha_boolean": "",
        "connectionDelay": false,
        "cacheJson": false,
        "heartbeat": false,
        "heartbeatInterval": "",
        "statusSeparator": "",
        "enableGlobalContextStore": false
    },
    {
        "id": "c91796e35b7292cb",
        "type": "ha-entity-config",
        "server": "eab52739.9cf7d8",
        "deviceConfig": "",
        "name": "car_charge_automation",
        "version": 6,
        "entityType": "switch",
        "haConfig": [
            {
                "property": "name",
                "value": "Car Charge Automation"
            },
            {
                "property": "icon",
                "value": "mdi:car"
            },
            {
                "property": "entity_picture",
                "value": ""
            },
            {
                "property": "entity_category",
                "value": "config"
            },
            {
                "property": "device_class",
                "value": "switch"
            }
        ],
        "resend": false,
        "debugEnabled": false
    }
]