Okofen boiler integration

Hello community! first, sorry for my english !!
I have a boiler okofen, I am currently using okovision to track the consumption and the sensors of the boiler. I would like to replace okovision by home-assistant.

the data are stored in csv files on the boiler.
there is 1 csv file per day, 1 line per minute

I am completely lost in the way of transmitting the information to home assistant.

I thought to recover the csv every hour via wget and then use the csvdiff command to reveal the last recorded data. the extracted data is stored in a json file. but after I do not know what to do.

how can I integrate them? Is there another method?

Thanks for your help !

Anybody know how I can integrate csv file in home-assitant?

you’ll need to create a custom component for this to work probably. What does the csv file look like? Can the csv file be purged? Does the device communicate in other ways?

hi,
my csv is stored in github
the csv file is removed after 5 days on the
I use actually okovision, i want create the same charts in my home assitant without php nor mysql used in okovision
my boiler communicate via modbus but with this methode, the boiler automation is disable.

You should be able to create a custom component that uses that csv file. Just use the last line of the file and perform an update whenever you feel like it. You could monitor changes to the file and update when a new line is added.

Those charts are complex, you’ll be able to make an xy plot. But an xy plot with vertical bars would also be very custom and would require it’s own component.

Any news on Okofen boiler integration into Home Assistant? I’m very interested on it.

1 Like

Me too … :slight_smile:

I’m controlling my Okofen boiler using Modbus and NodeRed, is the best way I’ve found so far.
Most of it are reading values, setting it off, daytime and night-time temperature, schedule, and rise or low the temperature settings

1 Like

Could you share more details on the modbus and nodered implementations you have done for this ?

For my usage, which is simply reading the values regularly, there is no need of an okofen integration.
I integrated it in less than an hour by following the procedure given here : GitHub - dominikamann/HomeAssistant-Oekofen-Pellematic-REST-Template: A template how to integrate a Ă–kofen Pellematic Compact via JSON Interface to Home Assistant which is based on the homeassistant REST integration and the standard simple okofen REST API available on the ip adresse of the boiler.

After watching a youtube video on how to get modbus readings from a solar inverter I decided to try to get the modbus readings from the boiler and also get to write the registers to set the boiler to comfort or setback temperatures, schedule mode or turn it off.
Here is a list of the modbus registers https://www.oekofen.com/assets/download/Deutsch_ADD/Energiemanagment/Modbus_V2_206_home_automation.pdf

I use modbus read-nodes, buffer-parser nodes, a change node and entity nodes for the readings. Button nodes, function nodes and modbus flex write to set the diferent modes and the trigger state nodes to change the temperature settings.

I can’t remember now all the steps and settings but I can share the flows and a longer explanation if you or someone else is interested.



23-01-09-09-20-47_01
This is how i use it. The second row are buttons, touching the “confort” one changes the mode to confort, and the boiler starts up.

Hi all ! thanks for your replies.
I remake my HASS soon, so, I want to test this different solutions !

Hello all,

I created an Ă–koFEN integration for HomeAssistant.

If you want you can take a look here GitHub - ckarrie/homeassistant-oekofen: Oekofen HomeAssistant integration (should be HACS compatible). If you have problems, suggestions or critics just leave me an Issue at github.

For installation just add the repository to your HACS and add “Oekofen Integration” afterwards.

1 Like

This is really nice! Thank you. Never used home assistant but it looks like a better idea than my custom Python script running.
Do you take the whole json from the api and save the entries or are you filtering based on your needs?

1 Like

I take the whole json (the “/all?”) but I plan to make that configuarble

1 Like

I am interested in your nodered configuration, can you export and share it?

Sure, the whole flow is too long for a single post so I made three flows out of it.

[
    {
        "id": "f12cf006c1b75eb4",
        "type": "buffer-parser",
        "z": "e9233eba556b7ea9",
        "name": "Temperatura exterior",
        "data": "payload.buffer",
        "dataType": "msg",
        "specification": "spec",
        "specificationType": "ui",
        "items": [
            {
                "type": "int16be",
                "name": "temperatura_exterior",
                "offset": 0,
                "length": 1,
                "offsetbit": 0,
                "scale": "/10",
                "mask": ""
            }
        ],
        "swap1": "",
        "swap2": "",
        "swap3": "",
        "swap1Type": "swap",
        "swap2Type": "swap",
        "swap3Type": "swap",
        "msgProperty": "payload",
        "msgPropertyType": "str",
        "resultType": "value",
        "resultTypeType": "return",
        "multipleResult": true,
        "fanOutMultipleResult": false,
        "setTopic": true,
        "outputs": 1,
        "x": 660,
        "y": 60,
        "wires": [
            [
                "05dff5d12f367832"
            ]
        ]
    },
    {
        "id": "ac0ba41413c8e9dd",
        "type": "buffer-parser",
        "z": "e9233eba556b7ea9",
        "name": "Modo",
        "data": "payload.buffer",
        "dataType": "msg",
        "specification": "spec",
        "specificationType": "ui",
        "items": [
            {
                "type": "int16be",
                "name": "Modo",
                "offset": 18,
                "length": 1,
                "offsetbit": 0,
                "scale": "1",
                "mask": ""
            }
        ],
        "swap1": "",
        "swap2": "",
        "swap3": "",
        "swap1Type": "swap",
        "swap2Type": "swap",
        "swap3Type": "swap",
        "msgProperty": "payload",
        "msgPropertyType": "str",
        "resultType": "value",
        "resultTypeType": "return",
        "multipleResult": true,
        "fanOutMultipleResult": false,
        "setTopic": true,
        "outputs": 1,
        "x": 610,
        "y": 140,
        "wires": [
            [
                "fb2782a26de95680"
            ]
        ]
    },
    {
        "id": "a9e6ebb1367bf490",
        "type": "buffer-parser",
        "z": "e9233eba556b7ea9",
        "name": "Calentar",
        "data": "payload.buffer",
        "dataType": "msg",
        "specification": "spec",
        "specificationType": "ui",
        "items": [
            {
                "type": "uint16be",
                "name": "calentar",
                "offset": 20,
                "length": 1,
                "offsetbit": 0,
                "scale": "/10",
                "mask": ""
            }
        ],
        "swap1": "",
        "swap2": "",
        "swap3": "",
        "swap1Type": "swap",
        "swap2Type": "swap",
        "swap3Type": "swap",
        "msgProperty": "payload",
        "msgPropertyType": "str",
        "resultType": "value",
        "resultTypeType": "return",
        "multipleResult": true,
        "fanOutMultipleResult": false,
        "setTopic": true,
        "outputs": 1,
        "x": 620,
        "y": 220,
        "wires": [
            [
                "0fd0cb08bca3f826"
            ]
        ]
    },
    {
        "id": "e897ec3aecc650db",
        "type": "buffer-parser",
        "z": "e9233eba556b7ea9",
        "name": "Enfriamiento",
        "data": "payload.buffer",
        "dataType": "msg",
        "specification": "spec",
        "specificationType": "ui",
        "items": [
            {
                "type": "uint16be",
                "name": "Enfriamiento",
                "offset": 22,
                "length": 1,
                "offsetbit": 0,
                "scale": "/10",
                "mask": ""
            }
        ],
        "swap1": "",
        "swap2": "",
        "swap3": "",
        "swap1Type": "swap",
        "swap2Type": "swap",
        "swap3Type": "swap",
        "msgProperty": "payload",
        "msgPropertyType": "str",
        "resultType": "value",
        "resultTypeType": "return",
        "multipleResult": true,
        "fanOutMultipleResult": false,
        "setTopic": true,
        "outputs": 1,
        "x": 630,
        "y": 300,
        "wires": [
            [
                "bd84f04e40988ce9"
            ]
        ]
    },
    {
        "id": "be6cf35f06d999bc",
        "type": "buffer-parser",
        "z": "e9233eba556b7ea9",
        "name": "Ajuste actual",
        "data": "payload.buffer",
        "dataType": "msg",
        "specification": "spec",
        "specificationType": "ui",
        "items": [
            {
                "type": "uint16be",
                "name": "Ajuste actual",
                "offset": 34,
                "length": 1,
                "offsetbit": 0,
                "scale": "/10",
                "mask": ""
            }
        ],
        "swap1": "",
        "swap2": "",
        "swap3": "",
        "swap1Type": "swap",
        "swap2Type": "swap",
        "swap3Type": "swap",
        "msgProperty": "payload",
        "msgPropertyType": "str",
        "resultType": "value",
        "resultTypeType": "return",
        "multipleResult": true,
        "fanOutMultipleResult": false,
        "setTopic": true,
        "outputs": 1,
        "x": 630,
        "y": 380,
        "wires": [
            [
                "7c664bd789183db9"
            ]
        ]
    },
    {
        "id": "c2ce315de1d0a688",
        "type": "buffer-parser",
        "z": "e9233eba556b7ea9",
        "name": "Termostato",
        "data": "payload.buffer",
        "dataType": "msg",
        "specification": "spec",
        "specificationType": "ui",
        "items": [
            {
                "type": "uint16be",
                "name": "termostato",
                "offset": 36,
                "length": 1,
                "offsetbit": 0,
                "scale": "/10",
                "mask": ""
            }
        ],
        "swap1": "",
        "swap2": "",
        "swap3": "",
        "swap1Type": "swap",
        "swap2Type": "swap",
        "swap3Type": "swap",
        "msgProperty": "payload",
        "msgPropertyType": "str",
        "resultType": "value",
        "resultTypeType": "return",
        "multipleResult": true,
        "fanOutMultipleResult": false,
        "setTopic": true,
        "outputs": 1,
        "x": 630,
        "y": 460,
        "wires": [
            [
                "acc26841df27aec6"
            ]
        ]
    },
    {
        "id": "9b80cdd94f0209f3",
        "type": "buffer-parser",
        "z": "e9233eba556b7ea9",
        "name": "Ajuste impulsion",
        "data": "payload.buffer",
        "dataType": "msg",
        "specification": "spec",
        "specificationType": "ui",
        "items": [
            {
                "type": "uint16be",
                "name": "Ajuste impulsion",
                "offset": 38,
                "length": 1,
                "offsetbit": 0,
                "scale": "/10",
                "mask": ""
            }
        ],
        "swap1": "",
        "swap2": "",
        "swap3": "",
        "swap1Type": "swap",
        "swap2Type": "swap",
        "swap3Type": "swap",
        "msgProperty": "payload",
        "msgPropertyType": "str",
        "resultType": "value",
        "resultTypeType": "return",
        "multipleResult": true,
        "fanOutMultipleResult": false,
        "setTopic": true,
        "outputs": 1,
        "x": 640,
        "y": 540,
        "wires": [
            [
                "c6369f3c099e894e"
            ]
        ]
    },
    {
        "id": "b3860b7fd017c42f",
        "type": "buffer-parser",
        "z": "e9233eba556b7ea9",
        "name": "Impulsion",
        "data": "payload.buffer",
        "dataType": "msg",
        "specification": "spec",
        "specificationType": "ui",
        "items": [
            {
                "type": "uint16be",
                "name": "impulsion",
                "offset": 40,
                "length": 1,
                "offsetbit": 0,
                "scale": "/10",
                "mask": ""
            }
        ],
        "swap1": "",
        "swap2": "",
        "swap3": "",
        "swap1Type": "swap",
        "swap2Type": "swap",
        "swap3Type": "swap",
        "msgProperty": "payload",
        "msgPropertyType": "str",
        "resultType": "value",
        "resultTypeType": "return",
        "multipleResult": true,
        "fanOutMultipleResult": false,
        "setTopic": true,
        "outputs": 1,
        "x": 620,
        "y": 620,
        "wires": [
            [
                "abfb122ad1b5879f"
            ]
        ]
    },
    {
        "id": "4635767f4b5125a8",
        "type": "modbus-read",
        "z": "e9233eba556b7ea9",
        "name": "Okofen",
        "topic": "",
        "showStatusActivities": false,
        "logIOActivities": false,
        "showErrors": false,
        "unitid": "",
        "dataType": "HoldingRegister",
        "adr": "2",
        "quantity": "25",
        "rate": "2",
        "rateUnit": "s",
        "delayOnStart": false,
        "startDelayTime": "10",
        "server": "6b719646c86bf0aa",
        "useIOFile": false,
        "ioFile": "",
        "useIOForPayload": false,
        "emptyMsgOnFail": false,
        "x": 170,
        "y": 380,
        "wires": [
            [],
            [
                "f12cf006c1b75eb4",
                "ac0ba41413c8e9dd",
                "a9e6ebb1367bf490",
                "e897ec3aecc650db",
                "be6cf35f06d999bc",
                "c2ce315de1d0a688",
                "9b80cdd94f0209f3",
                "b3860b7fd017c42f",
                "9dced0ab7a3ebdc6"
            ]
        ]
    },
    {
        "id": "acc26841df27aec6",
        "type": "ha-entity",
        "z": "e9233eba556b7ea9",
        "name": "Termostato",
        "server": "9794940b.0fbbd8",
        "version": 2,
        "debugenabled": false,
        "outputs": 1,
        "entityType": "sensor",
        "config": [
            {
                "property": "name",
                "value": "Termostato"
            },
            {
                "property": "device_class",
                "value": "sensor"
            },
            {
                "property": "icon",
                "value": ""
            },
            {
                "property": "unit_of_measurement",
                "value": "C"
            },
            {
                "property": "state_class",
                "value": ""
            },
            {
                "property": "last_reset",
                "value": ""
            }
        ],
        "state": "payload",
        "stateType": "msg",
        "attributes": [],
        "resend": false,
        "outputLocation": "payload",
        "outputLocationType": "none",
        "inputOverride": "allow",
        "outputOnStateChange": false,
        "outputPayload": "",
        "outputPayloadType": "str",
        "x": 1450,
        "y": 460,
        "wires": [
            []
        ]
    },
    {
        "id": "c6369f3c099e894e",
        "type": "ha-entity",
        "z": "e9233eba556b7ea9",
        "name": "Ajuste impulsion",
        "server": "9794940b.0fbbd8",
        "version": 2,
        "debugenabled": false,
        "outputs": 1,
        "entityType": "sensor",
        "config": [
            {
                "property": "name",
                "value": "Ajuste impulsion"
            },
            {
                "property": "device_class",
                "value": "sensor"
            },
            {
                "property": "icon",
                "value": ""
            },
            {
                "property": "unit_of_measurement",
                "value": "C"
            },
            {
                "property": "state_class",
                "value": ""
            },
            {
                "property": "last_reset",
                "value": ""
            }
        ],
        "state": "payload",
        "stateType": "msg",
        "attributes": [],
        "resend": true,
        "outputLocation": "payload",
        "outputLocationType": "none",
        "inputOverride": "allow",
        "outputOnStateChange": false,
        "outputPayload": "",
        "outputPayloadType": "str",
        "x": 1460,
        "y": 540,
        "wires": [
            []
        ]
    },
    {
        "id": "abfb122ad1b5879f",
        "type": "ha-entity",
        "z": "e9233eba556b7ea9",
        "name": "Impulsion",
        "server": "9794940b.0fbbd8",
        "version": 2,
        "debugenabled": false,
        "outputs": 1,
        "entityType": "sensor",
        "config": [
            {
                "property": "name",
                "value": "Impulsion"
            },
            {
                "property": "device_class",
                "value": "Sensor"
            },
            {
                "property": "icon",
                "value": ""
            },
            {
                "property": "unit_of_measurement",
                "value": "C"
            },
            {
                "property": "state_class",
                "value": ""
            },
            {
                "property": "last_reset",
                "value": ""
            }
        ],
        "state": "payload",
        "stateType": "msg",
        "attributes": [],
        "resend": true,
        "outputLocation": "payload",
        "outputLocationType": "none",
        "inputOverride": "allow",
        "outputOnStateChange": false,
        "outputPayload": "",
        "outputPayloadType": "str",
        "x": 1440,
        "y": 620,
        "wires": [
            []
        ]
    },
    {
        "id": "7c664bd789183db9",
        "type": "ha-entity",
        "z": "e9233eba556b7ea9",
        "name": "Ajuste",
        "server": "9794940b.0fbbd8",
        "version": 2,
        "debugenabled": false,
        "outputs": 1,
        "entityType": "sensor",
        "config": [
            {
                "property": "name",
                "value": "Ajuste"
            },
            {
                "property": "device_class",
                "value": "Sensor"
            },
            {
                "property": "icon",
                "value": ""
            },
            {
                "property": "unit_of_measurement",
                "value": "C"
            },
            {
                "property": "state_class",
                "value": ""
            },
            {
                "property": "last_reset",
                "value": ""
            }
        ],
        "state": "payload",
        "stateType": "msg",
        "attributes": [],
        "resend": true,
        "outputLocation": "payload",
        "outputLocationType": "none",
        "inputOverride": "allow",
        "outputOnStateChange": false,
        "outputPayload": "",
        "outputPayloadType": "str",
        "x": 1430,
        "y": 380,
        "wires": [
            []
        ]
    },
    {
        "id": "bd84f04e40988ce9",
        "type": "ha-entity",
        "z": "e9233eba556b7ea9",
        "name": "Noche",
        "server": "9794940b.0fbbd8",
        "version": 2,
        "debugenabled": false,
        "outputs": 1,
        "entityType": "sensor",
        "config": [
            {
                "property": "name",
                "value": "Noche"
            },
            {
                "property": "device_class",
                "value": "Senor"
            },
            {
                "property": "icon",
                "value": ""
            },
            {
                "property": "unit_of_measurement",
                "value": "C"
            },
            {
                "property": "state_class",
                "value": ""
            },
            {
                "property": "last_reset",
                "value": ""
            }
        ],
        "state": "payload",
        "stateType": "msg",
        "attributes": [],
        "resend": true,
        "outputLocation": "payload",
        "outputLocationType": "none",
        "inputOverride": "allow",
        "outputOnStateChange": false,
        "outputPayload": "",
        "outputPayloadType": "str",
        "x": 1430,
        "y": 300,
        "wires": [
            []
        ]
    },
    {
        "id": "0fd0cb08bca3f826",
        "type": "ha-entity",
        "z": "e9233eba556b7ea9",
        "name": "Confort",
        "server": "9794940b.0fbbd8",
        "version": 2,
        "debugenabled": false,
        "outputs": 1,
        "entityType": "sensor",
        "config": [
            {
                "property": "name",
                "value": "Confort"
            },
            {
                "property": "device_class",
                "value": "sensor"
            },
            {
                "property": "icon",
                "value": ""
            },
            {
                "property": "unit_of_measurement",
                "value": "C"
            },
            {
                "property": "state_class",
                "value": ""
            },
            {
                "property": "last_reset",
                "value": ""
            }
        ],
        "state": "payload",
        "stateType": "msg",
        "attributes": [],
        "resend": true,
        "outputLocation": "payload",
        "outputLocationType": "none",
        "inputOverride": "allow",
        "outputOnStateChange": false,
        "outputPayload": "",
        "outputPayloadType": "str",
        "x": 1440,
        "y": 220,
        "wires": [
            []
        ]
    },
    {
        "id": "617cb3f2e8f7abc1",
        "type": "ha-entity",
        "z": "e9233eba556b7ea9",
        "name": "Modo",
        "server": "9794940b.0fbbd8",
        "version": 2,
        "debugenabled": false,
        "outputs": 1,
        "entityType": "sensor",
        "config": [
            {
                "property": "name",
                "value": "Modo"
            },
            {
                "property": "device_class",
                "value": "switch"
            },
            {
                "property": "icon",
                "value": ""
            },
            {
                "property": "unit_of_measurement",
                "value": ""
            },
            {
                "property": "state_class",
                "value": ""
            },
            {
                "property": "last_reset",
                "value": ""
            }
        ],
        "state": "payload",
        "stateType": "msg",
        "attributes": [],
        "resend": true,
        "outputLocation": "payload",
        "outputLocationType": "none",
        "inputOverride": "allow",
        "outputOnStateChange": false,
        "outputPayload": "",
        "outputPayloadType": "num",
        "x": 1430,
        "y": 140,
        "wires": [
            []
        ]
    },
    {
        "id": "05dff5d12f367832",
        "type": "ha-entity",
        "z": "e9233eba556b7ea9",
        "name": "Temperatura Exterior",
        "server": "9794940b.0fbbd8",
        "version": 2,
        "debugenabled": false,
        "outputs": 1,
        "entityType": "sensor",
        "config": [
            {
                "property": "name",
                "value": "Temperatura Exterior"
            },
            {
                "property": "device_class",
                "value": "sensor"
            },
            {
                "property": "icon",
                "value": ""
            },
            {
                "property": "unit_of_measurement",
                "value": "C"
            },
            {
                "property": "state_class",
                "value": ""
            },
            {
                "property": "last_reset",
                "value": ""
            }
        ],
        "state": "payload",
        "stateType": "msg",
        "attributes": [],
        "resend": true,
        "outputLocation": "payload",
        "outputLocationType": "none",
        "inputOverride": "allow",
        "outputOnStateChange": false,
        "outputPayload": "",
        "outputPayloadType": "str",
        "x": 1480,
        "y": 60,
        "wires": [
            []
        ]
    },
    {
        "id": "9dced0ab7a3ebdc6",
        "type": "buffer-parser",
        "z": "e9233eba556b7ea9",
        "name": "Override",
        "data": "payload.buffer",
        "dataType": "msg",
        "specification": "spec",
        "specificationType": "ui",
        "items": [
            {
                "type": "int16be",
                "name": "item1",
                "offset": 24,
                "length": 1,
                "offsetbit": 0,
                "scale": "/10",
                "mask": ""
            }
        ],
        "swap1": "",
        "swap2": "",
        "swap3": "",
        "swap1Type": "swap",
        "swap2Type": "swap",
        "swap3Type": "swap",
        "msgProperty": "payload",
        "msgPropertyType": "str",
        "resultType": "value",
        "resultTypeType": "return",
        "multipleResult": true,
        "fanOutMultipleResult": false,
        "setTopic": true,
        "outputs": 1,
        "x": 620,
        "y": 700,
        "wires": [
            [
                "a636c4e438c8793a"
            ]
        ]
    },
    {
        "id": "a636c4e438c8793a",
        "type": "ha-entity",
        "z": "e9233eba556b7ea9",
        "name": "Override",
        "server": "9794940b.0fbbd8",
        "version": 2,
        "debugenabled": false,
        "outputs": 1,
        "entityType": "sensor",
        "config": [
            {
                "property": "name",
                "value": "Override"
            },
            {
                "property": "device_class",
                "value": "sensor"
            },
            {
                "property": "icon",
                "value": ""
            },
            {
                "property": "unit_of_measurement",
                "value": "C"
            },
            {
                "property": "state_class",
                "value": ""
            },
            {
                "property": "last_reset",
                "value": ""
            }
        ],
        "state": "payload",
        "stateType": "msg",
        "attributes": [],
        "resend": true,
        "outputLocation": "payload",
        "outputLocationType": "none",
        "inputOverride": "allow",
        "outputOnStateChange": false,
        "outputPayload": "",
        "outputPayloadType": "str",
        "x": 1440,
        "y": 700,
        "wires": [
            []
        ]
    },
    {
        "id": "fb2782a26de95680",
        "type": "change",
        "z": "e9233eba556b7ea9",
        "name": "",
        "rules": [
            {
                "t": "change",
                "p": "payload",
                "pt": "msg",
                "from": "0",
                "fromt": "num",
                "to": "Off",
                "tot": "str"
            },
            {
                "t": "change",
                "p": "payload",
                "pt": "msg",
                "from": "2",
                "fromt": "num",
                "to": "Confort",
                "tot": "str"
            },
            {
                "t": "change",
                "p": "payload",
                "pt": "msg",
                "from": "3",
                "fromt": "num",
                "to": "Noche",
                "tot": "str"
            },
            {
                "t": "change",
                "p": "payload",
                "pt": "msg",
                "from": "1",
                "fromt": "num",
                "to": "Auto",
                "tot": "str"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 1060,
        "y": 140,
        "wires": [
            [
                "617cb3f2e8f7abc1"
            ]
        ]
    },
    {
        "id": "6b719646c86bf0aa",
        "type": "modbus-client",
        "name": "Okofen-Modbus",
        "clienttype": "tcp",
        "bufferCommands": false,
        "stateLogEnabled": false,
        "queueLogEnabled": true,
        "tcpHost": "192.168.1.212",
        "tcpPort": "502",
        "tcpType": "DEFAULT",
        "serialPort": "/dev/ttyUSB",
        "serialType": "RTU-BUFFERD",
        "serialBaudrate": "9600",
        "serialDatabits": "8",
        "serialStopbits": "1",
        "serialParity": "none",
        "serialConnectionDelay": "100",
        "serialAsciiResponseStartDelimiter": "0x3A",
        "unit_id": "0",
        "commandDelay": "3",
        "clientTimeout": "1000",
        "reconnectOnTimeout": true,
        "reconnectTimeout": "2000",
        "parallelUnitIdsAllowed": true
    },
    {
        "id": "9794940b.0fbbd8",
        "type": "server",
        "name": "Home Assistant",
        "version": 2,
        "addon": false,
        "rejectUnauthorizedCerts": true,
        "ha_boolean": "y|yes|true|on|home|open",
        "connectionDelay": true,
        "cacheJson": true,
        "heartbeat": false,
        "heartbeatInterval": "30"
    }
]
[
    {
        "id": "a04215d841bec8ee",
        "type": "function",
        "z": "e9233eba556b7ea9",
        "name": "Noche",
        "func": "msg.payload = { \n    value: 3, \n    'fc': 6, \n    'unitid': 0, \n    'address': 11 , \n    'quantity': 1 }\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 530,
        "y": 980,
        "wires": [
            [
                "4e2e0d78e8751c3b"
            ]
        ]
    },
    {
        "id": "4e2e0d78e8751c3b",
        "type": "modbus-flex-write",
        "z": "e9233eba556b7ea9",
        "name": "",
        "showStatusActivities": false,
        "showErrors": false,
        "server": "6b719646c86bf0aa",
        "emptyMsgOnFail": false,
        "keepMsgProperties": false,
        "x": 1150,
        "y": 1080,
        "wires": [
            [],
            []
        ]
    },
    {
        "id": "cc83900f0336a2c8",
        "type": "function",
        "z": "e9233eba556b7ea9",
        "name": "Confort",
        "func": "msg.payload = { \n    value: 2, \n    'fc': 6, \n    'unitid': 0, \n    'address': 11 , \n    'quantity': 1 }\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 540,
        "y": 1060,
        "wires": [
            [
                "4e2e0d78e8751c3b"
            ]
        ]
    },
    {
        "id": "0b1ab15087e884e4",
        "type": "function",
        "z": "e9233eba556b7ea9",
        "name": "OFF",
        "func": "msg.payload = { \n    value: 0, \n    'fc': 6, \n    'unitid': 0, \n    'address': 11 , \n    'quantity': 1 }\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 530,
        "y": 900,
        "wires": [
            [
                "4e2e0d78e8751c3b"
            ]
        ]
    },
    {
        "id": "4f56c53472b2a36d",
        "type": "ha-button",
        "z": "e9233eba556b7ea9",
        "name": "OFF",
        "version": 0,
        "debugenabled": false,
        "outputs": 1,
        "entityConfig": "553effd10737a13a",
        "outputProperties": [
            {
                "property": "payload",
                "propertyType": "msg",
                "value": "",
                "valueType": "date"
            }
        ],
        "x": 210,
        "y": 900,
        "wires": [
            [
                "0b1ab15087e884e4"
            ]
        ]
    },
    {
        "id": "56733779e6f5b14d",
        "type": "ha-button",
        "z": "e9233eba556b7ea9",
        "name": "Confort",
        "version": 0,
        "debugenabled": false,
        "outputs": 1,
        "entityConfig": "23bcd94c5fefa33f",
        "outputProperties": [
            {
                "property": "payload",
                "propertyType": "msg",
                "value": "",
                "valueType": "date"
            }
        ],
        "x": 210,
        "y": 1060,
        "wires": [
            [
                "cc83900f0336a2c8"
            ]
        ]
    },
    {
        "id": "7d4073f19a69cc8e",
        "type": "ha-button",
        "z": "e9233eba556b7ea9",
        "name": "Noche",
        "version": 0,
        "debugenabled": false,
        "outputs": 1,
        "entityConfig": "c561c760b267f165",
        "outputProperties": [
            {
                "property": "payload",
                "propertyType": "msg",
                "value": "",
                "valueType": "date"
            }
        ],
        "x": 210,
        "y": 980,
        "wires": [
            [
                "a04215d841bec8ee"
            ]
        ]
    },
    {
        "id": "f20b2f6f74e2a01e",
        "type": "function",
        "z": "e9233eba556b7ea9",
        "name": "Base",
        "func": "msg.payload = { \n    value: msg.payload *= 10, \n    'fc': 6, \n    'unitid': 0, \n    'address': 13 , \n    'quantity': 1 }\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 530,
        "y": 1280,
        "wires": [
            [
                "4e2e0d78e8751c3b"
            ]
        ]
    },
    {
        "id": "5926ea6cab529ac2",
        "type": "function",
        "z": "e9233eba556b7ea9",
        "name": "Confort",
        "func": "msg.payload = { \n    value: msg.payload *= 10, \n    'fc': 6, \n    'unitid': 0, \n    'address': 12 , \n    'quantity': 1 }\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 540,
        "y": 1180,
        "wires": [
            [
                "4e2e0d78e8751c3b"
            ]
        ]
    },
    {
        "id": "c95e42e2ef4ebc93",
        "type": "function",
        "z": "e9233eba556b7ea9",
        "name": "Auto",
        "func": "msg.payload = { \n    value: 1, \n    'fc': 6, \n    'unitid': 0, \n    'address': 11 , \n    'quantity': 1 }\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 530,
        "y": 840,
        "wires": [
            [
                "4e2e0d78e8751c3b"
            ]
        ]
    },
    {
        "id": "dcd5a743679bb10e",
        "type": "ha-button",
        "z": "e9233eba556b7ea9",
        "name": "Auto",
        "version": 0,
        "debugenabled": false,
        "outputs": 1,
        "entityConfig": "736c91fce69df34f",
        "outputProperties": [
            {
                "property": "payload",
                "propertyType": "msg",
                "value": "",
                "valueType": "date"
            }
        ],
        "x": 210,
        "y": 840,
        "wires": [
            [
                "c95e42e2ef4ebc93"
            ]
        ]
    },
    {
        "id": "795794a32ceb00b8",
        "type": "trigger-state",
        "z": "e9233eba556b7ea9",
        "name": "Ajustar Confort",
        "server": "9794940b.0fbbd8",
        "version": 2,
        "exposeToHomeAssistant": true,
        "haConfig": [
            {
                "property": "name",
                "value": ""
            },
            {
                "property": "icon",
                "value": ""
            }
        ],
        "entityid": "input_number.confort",
        "entityidfiltertype": "exact",
        "debugenabled": false,
        "constraints": [
            {
                "targetType": "this_entity",
                "targetValue": "",
                "propertyType": "current_state",
                "propertyValue": "new_state.state",
                "comparatorType": "is",
                "comparatorValueDatatype": "str",
                "comparatorValue": ""
            }
        ],
        "inputs": 0,
        "outputs": 2,
        "customoutputs": [],
        "outputinitially": false,
        "state_type": "num",
        "enableInput": false,
        "x": 260,
        "y": 1180,
        "wires": [
            [],
            [
                "5926ea6cab529ac2"
            ]
        ]
    },
    {
        "id": "4e59d5d13b9b482f",
        "type": "trigger-state",
        "z": "e9233eba556b7ea9",
        "name": "Ajustar Noche",
        "server": "9794940b.0fbbd8",
        "version": 2,
        "exposeToHomeAssistant": true,
        "haConfig": [
            {
                "property": "name",
                "value": ""
            },
            {
                "property": "icon",
                "value": ""
            }
        ],
        "entityid": "input_number.ajuste_noche",
        "entityidfiltertype": "exact",
        "debugenabled": false,
        "constraints": [
            {
                "targetType": "this_entity",
                "targetValue": "",
                "propertyType": "current_state",
                "propertyValue": "new_state.state",
                "comparatorType": "is",
                "comparatorValueDatatype": "str",
                "comparatorValue": ""
            }
        ],
        "inputs": 0,
        "outputs": 2,
        "customoutputs": [],
        "outputinitially": false,
        "state_type": "num",
        "enableInput": false,
        "x": 250,
        "y": 1280,
        "wires": [
            [],
            [
                "f20b2f6f74e2a01e"
            ]
        ]
    },
    {
        "id": "6b719646c86bf0aa",
        "type": "modbus-client",
        "name": "Okofen-Modbus",
        "clienttype": "tcp",
        "bufferCommands": false,
        "stateLogEnabled": false,
        "queueLogEnabled": true,
        "tcpHost": "192.168.1.212",
        "tcpPort": "502",
        "tcpType": "DEFAULT",
        "serialPort": "/dev/ttyUSB",
        "serialType": "RTU-BUFFERD",
        "serialBaudrate": "9600",
        "serialDatabits": "8",
        "serialStopbits": "1",
        "serialParity": "none",
        "serialConnectionDelay": "100",
        "serialAsciiResponseStartDelimiter": "0x3A",
        "unit_id": "0",
        "commandDelay": "3",
        "clientTimeout": "1000",
        "reconnectOnTimeout": true,
        "reconnectTimeout": "2000",
        "parallelUnitIdsAllowed": true
    },
    {
        "id": "553effd10737a13a",
        "type": "ha-entity-config",
        "server": "9794940b.0fbbd8",
        "name": "OFF",
        "version": 2,
        "haConfig": [
            {
                "property": "name",
                "value": "OFF"
            },
            {
                "property": "icon",
                "value": ""
            },
            {
                "property": "device_class",
                "value": "update"
            }
        ],
        "entityType": "button"
    },
    {
        "id": "23bcd94c5fefa33f",
        "type": "ha-entity-config",
        "server": "9794940b.0fbbd8",
        "name": "Confort",
        "version": 2,
        "haConfig": [
            {
                "property": "name",
                "value": "Confort"
            },
            {
                "property": "icon",
                "value": ""
            },
            {
                "property": "device_class",
                "value": "update"
            }
        ],
        "entityType": "button"
    },
    {
        "id": "c561c760b267f165",
        "type": "ha-entity-config",
        "server": "9794940b.0fbbd8",
        "name": "Noche",
        "version": 2,
        "haConfig": [
            {
                "property": "name",
                "value": "Noche"
            },
            {
                "property": "icon",
                "value": ""
            },
            {
                "property": "device_class",
                "value": "update"
            }
        ],
        "entityType": "button"
    },
    {
        "id": "736c91fce69df34f",
        "type": "ha-entity-config",
        "server": "9794940b.0fbbd8",
        "name": "Auto",
        "version": 2,
        "haConfig": [
            {
                "property": "name",
                "value": "Auto"
            },
            {
                "property": "icon",
                "value": ""
            },
            {
                "property": "device_class",
                "value": "update"
            }
        ],
        "entityType": "button"
    },
    {
        "id": "9794940b.0fbbd8",
        "type": "server",
        "name": "Home Assistant",
        "version": 2,
        "addon": false,
        "rejectUnauthorizedCerts": true,
        "ha_boolean": "y|yes|true|on|home|open",
        "connectionDelay": true,
        "cacheJson": true,
        "heartbeat": false,
        "heartbeatInterval": "30"
    }
]
[
    {
        "id": "3fcd807dc51dc53b",
        "type": "modbus-read",
        "z": "e9233eba556b7ea9",
        "name": "Caldera",
        "topic": "",
        "showStatusActivities": false,
        "logIOActivities": false,
        "showErrors": false,
        "unitid": "",
        "dataType": "HoldingRegister",
        "adr": "102",
        "quantity": "6",
        "rate": "1",
        "rateUnit": "s",
        "delayOnStart": false,
        "startDelayTime": "",
        "server": "6b719646c86bf0aa",
        "useIOFile": false,
        "ioFile": "",
        "useIOForPayload": false,
        "emptyMsgOnFail": false,
        "x": 410,
        "y": 1560,
        "wires": [
            [],
            [
                "0fbcab8c16876812",
                "6f2672c705e3e605",
                "59502d40defb12df",
                "ad695f7191207645",
                "b03ca8301f5a2a26"
            ]
        ]
    },
    {
        "id": "0fbcab8c16876812",
        "type": "buffer-parser",
        "z": "e9233eba556b7ea9",
        "name": "Temperatura Caldera",
        "data": "payload.buffer",
        "dataType": "msg",
        "specification": "spec",
        "specificationType": "ui",
        "items": [
            {
                "type": "int16be",
                "name": "Temperatura Caldera",
                "offset": 0,
                "length": 1,
                "offsetbit": 0,
                "scale": "/10",
                "mask": ""
            }
        ],
        "swap1": "",
        "swap2": "",
        "swap3": "",
        "swap1Type": "swap",
        "swap2Type": "swap",
        "swap3Type": "swap",
        "msgProperty": "payload",
        "msgPropertyType": "str",
        "resultType": "value",
        "resultTypeType": "return",
        "multipleResult": true,
        "fanOutMultipleResult": false,
        "setTopic": true,
        "outputs": 1,
        "x": 780,
        "y": 1500,
        "wires": [
            [
                "deef674cba8464ab"
            ]
        ]
    },
    {
        "id": "6f2672c705e3e605",
        "type": "buffer-parser",
        "z": "e9233eba556b7ea9",
        "name": "AjusteCaldera",
        "data": "payload.buffer",
        "dataType": "msg",
        "specification": "spec",
        "specificationType": "ui",
        "items": [
            {
                "type": "int16be",
                "name": "Ajuste Caldera",
                "offset": 2,
                "length": 1,
                "offsetbit": 0,
                "scale": "/10",
                "mask": ""
            }
        ],
        "swap1": "",
        "swap2": "",
        "swap3": "",
        "swap1Type": "swap",
        "swap2Type": "swap",
        "swap3Type": "swap",
        "msgProperty": "payload",
        "msgPropertyType": "str",
        "resultType": "value",
        "resultTypeType": "return",
        "multipleResult": true,
        "fanOutMultipleResult": false,
        "setTopic": true,
        "outputs": 1,
        "x": 760,
        "y": 1580,
        "wires": [
            [
                "5cd3d22c9f611081"
            ]
        ]
    },
    {
        "id": "59502d40defb12df",
        "type": "buffer-parser",
        "z": "e9233eba556b7ea9",
        "name": "Modulacion",
        "data": "payload.buffer",
        "dataType": "msg",
        "specification": "spec",
        "specificationType": "ui",
        "items": [
            {
                "type": "int16be",
                "name": "Modulacion",
                "offset": 4,
                "length": 1,
                "offsetbit": 0,
                "scale": "1",
                "mask": ""
            }
        ],
        "swap1": "",
        "swap2": "",
        "swap3": "",
        "swap1Type": "swap",
        "swap2Type": "swap",
        "swap3Type": "swap",
        "msgProperty": "payload",
        "msgPropertyType": "str",
        "resultType": "value",
        "resultTypeType": "return",
        "multipleResult": true,
        "fanOutMultipleResult": false,
        "setTopic": true,
        "outputs": 1,
        "x": 750,
        "y": 1660,
        "wires": [
            [
                "cf10c73745803212"
            ]
        ]
    },
    {
        "id": "deef674cba8464ab",
        "type": "ha-entity",
        "z": "e9233eba556b7ea9",
        "name": "Temperatura caldera",
        "server": "9794940b.0fbbd8",
        "version": 2,
        "debugenabled": false,
        "outputs": 1,
        "entityType": "sensor",
        "config": [
            {
                "property": "name",
                "value": "Temperatura caldera"
            },
            {
                "property": "device_class",
                "value": "sensor"
            },
            {
                "property": "icon",
                "value": ""
            },
            {
                "property": "unit_of_measurement",
                "value": "C"
            },
            {
                "property": "state_class",
                "value": ""
            },
            {
                "property": "last_reset",
                "value": ""
            }
        ],
        "state": "payload",
        "stateType": "msg",
        "attributes": [],
        "resend": true,
        "outputLocation": "payload",
        "outputLocationType": "none",
        "inputOverride": "allow",
        "outputOnStateChange": false,
        "outputPayload": "",
        "outputPayloadType": "str",
        "x": 1160,
        "y": 1500,
        "wires": [
            []
        ]
    },
    {
        "id": "5cd3d22c9f611081",
        "type": "ha-entity",
        "z": "e9233eba556b7ea9",
        "name": "Ajuste caldera",
        "server": "9794940b.0fbbd8",
        "version": 2,
        "debugenabled": false,
        "outputs": 1,
        "entityType": "sensor",
        "config": [
            {
                "property": "name",
                "value": "Ajuste caldera"
            },
            {
                "property": "device_class",
                "value": "sensor"
            },
            {
                "property": "icon",
                "value": ""
            },
            {
                "property": "unit_of_measurement",
                "value": "C"
            },
            {
                "property": "state_class",
                "value": ""
            },
            {
                "property": "last_reset",
                "value": ""
            }
        ],
        "state": "payload",
        "stateType": "msg",
        "attributes": [],
        "resend": true,
        "outputLocation": "payload",
        "outputLocationType": "none",
        "inputOverride": "allow",
        "outputOnStateChange": false,
        "outputPayload": "",
        "outputPayloadType": "str",
        "x": 1140,
        "y": 1580,
        "wires": [
            []
        ]
    },
    {
        "id": "cf10c73745803212",
        "type": "ha-entity",
        "z": "e9233eba556b7ea9",
        "name": "Modulacion",
        "server": "9794940b.0fbbd8",
        "version": 2,
        "debugenabled": false,
        "outputs": 1,
        "entityType": "sensor",
        "config": [
            {
                "property": "name",
                "value": "Modulacion"
            },
            {
                "property": "device_class",
                "value": "sensor"
            },
            {
                "property": "icon",
                "value": ""
            },
            {
                "property": "unit_of_measurement",
                "value": "%"
            },
            {
                "property": "state_class",
                "value": ""
            },
            {
                "property": "last_reset",
                "value": ""
            }
        ],
        "state": "payload",
        "stateType": "msg",
        "attributes": [],
        "resend": true,
        "outputLocation": "payload",
        "outputLocationType": "none",
        "inputOverride": "allow",
        "outputOnStateChange": false,
        "outputPayload": "",
        "outputPayloadType": "str",
        "x": 1130,
        "y": 1660,
        "wires": [
            []
        ]
    },
    {
        "id": "ad695f7191207645",
        "type": "buffer-parser",
        "z": "e9233eba556b7ea9",
        "name": "Horas",
        "data": "payload.buffer",
        "dataType": "msg",
        "specification": "spec",
        "specificationType": "ui",
        "items": [
            {
                "type": "int16be",
                "name": "Horas",
                "offset": 8,
                "length": 1,
                "offsetbit": 0,
                "scale": "1",
                "mask": ""
            }
        ],
        "swap1": "",
        "swap2": "",
        "swap3": "",
        "swap1Type": "swap",
        "swap2Type": "swap",
        "swap3Type": "swap",
        "msgProperty": "payload",
        "msgPropertyType": "str",
        "resultType": "value",
        "resultTypeType": "return",
        "multipleResult": true,
        "fanOutMultipleResult": false,
        "setTopic": true,
        "outputs": 1,
        "x": 730,
        "y": 1820,
        "wires": [
            [
                "2862c91433ef455b"
            ]
        ]
    },
    {
        "id": "b03ca8301f5a2a26",
        "type": "buffer-parser",
        "z": "e9233eba556b7ea9",
        "name": "Arranques",
        "data": "payload.buffer",
        "dataType": "msg",
        "specification": "spec",
        "specificationType": "ui",
        "items": [
            {
                "type": "int16be",
                "name": "Arranques",
                "offset": 10,
                "length": 1,
                "offsetbit": 0,
                "scale": "1",
                "mask": ""
            }
        ],
        "swap1": "",
        "swap2": "",
        "swap3": "",
        "swap1Type": "swap",
        "swap2Type": "swap",
        "swap3Type": "swap",
        "msgProperty": "payload",
        "msgPropertyType": "str",
        "resultType": "value",
        "resultTypeType": "return",
        "multipleResult": true,
        "fanOutMultipleResult": false,
        "setTopic": true,
        "outputs": 1,
        "x": 750,
        "y": 1920,
        "wires": [
            [
                "4ec44c7dfb718f5b"
            ]
        ]
    },
    {
        "id": "4ec44c7dfb718f5b",
        "type": "ha-entity",
        "z": "e9233eba556b7ea9",
        "name": "Aranques",
        "server": "9794940b.0fbbd8",
        "version": 2,
        "debugenabled": false,
        "outputs": 1,
        "entityType": "sensor",
        "config": [
            {
                "property": "name",
                "value": "Arranques"
            },
            {
                "property": "device_class",
                "value": "sensor"
            },
            {
                "property": "icon",
                "value": ""
            },
            {
                "property": "unit_of_measurement",
                "value": ""
            },
            {
                "property": "state_class",
                "value": ""
            },
            {
                "property": "last_reset",
                "value": ""
            }
        ],
        "state": "payload",
        "stateType": "msg",
        "attributes": [],
        "resend": true,
        "outputLocation": "payload",
        "outputLocationType": "none",
        "inputOverride": "allow",
        "outputOnStateChange": false,
        "outputPayload": "",
        "outputPayloadType": "str",
        "x": 1120,
        "y": 1920,
        "wires": [
            []
        ]
    },
    {
        "id": "2862c91433ef455b",
        "type": "ha-entity",
        "z": "e9233eba556b7ea9",
        "name": "Horas",
        "server": "9794940b.0fbbd8",
        "version": 2,
        "debugenabled": false,
        "outputs": 1,
        "entityType": "sensor",
        "config": [
            {
                "property": "name",
                "value": "Horas"
            },
            {
                "property": "device_class",
                "value": "sensor"
            },
            {
                "property": "icon",
                "value": ""
            },
            {
                "property": "unit_of_measurement",
                "value": "H"
            },
            {
                "property": "state_class",
                "value": ""
            },
            {
                "property": "last_reset",
                "value": ""
            }
        ],
        "state": "payload",
        "stateType": "msg",
        "attributes": [],
        "resend": true,
        "outputLocation": "payload",
        "outputLocationType": "none",
        "inputOverride": "allow",
        "outputOnStateChange": false,
        "outputPayload": "",
        "outputPayloadType": "str",
        "x": 1110,
        "y": 1820,
        "wires": [
            []
        ]
    },
    {
        "id": "6b719646c86bf0aa",
        "type": "modbus-client",
        "name": "Okofen-Modbus",
        "clienttype": "tcp",
        "bufferCommands": false,
        "stateLogEnabled": false,
        "queueLogEnabled": true,
        "tcpHost": "192.168.1.212",
        "tcpPort": "502",
        "tcpType": "DEFAULT",
        "serialPort": "/dev/ttyUSB",
        "serialType": "RTU-BUFFERD",
        "serialBaudrate": "9600",
        "serialDatabits": "8",
        "serialStopbits": "1",
        "serialParity": "none",
        "serialConnectionDelay": "100",
        "serialAsciiResponseStartDelimiter": "0x3A",
        "unit_id": "0",
        "commandDelay": "3",
        "clientTimeout": "1000",
        "reconnectOnTimeout": true,
        "reconnectTimeout": "2000",
        "parallelUnitIdsAllowed": true
    },
    {
        "id": "9794940b.0fbbd8",
        "type": "server",
        "name": "Home Assistant",
        "version": 2,
        "addon": false,
        "rejectUnauthorizedCerts": true,
        "ha_boolean": "y|yes|true|on|home|open",
        "connectionDelay": true,
        "cacheJson": true,
        "heartbeat": false,
        "heartbeatInterval": "30"
    }
]

in fact modbus is not needed to set values, you also can do it with JSON
here’s an exemple :

<ip>:<port>/<pw>/hk<id_circuit>.mode_auto=<value>

with the rest_command settings call differents urls, you can set almost any settings you need and use them in automation

thanks to Wallabeng : Toggleable circuit states · dominikamann/oekofen-pellematic-compact · Discussion #28 · GitHub