Slow I/O input on GX 150 I/O extenders

Hi all,

Really love the Cerbo GX and the GX I/O extenders but I am running an issue.
I want to connect a pulse switch to the GX I/O where I can turn on a light so I my wife doesn’t have to use the touch screen.
The response is very slow and I need to keep the pulse switch touched for more than a second. I have it now on Burglar sensor but with pulse count it is also slow. I am programming this in the node-red from the large firmware and I am using FW 3.71.

Is this by design or am I doing something wrong?

KR Stefan

Maybe share the flow?

Hi Nick,

I don’t have it here but it is just 1 simple flow, get status of burglar alarm - little function to togle light - output to PMW.

KR Stefan

This is the Json I imported (and changed to the right nodes)

[
{
“id”: “alarm_toggle_flow”,
“type”: “tab”,
“label”: “Alarm Lamp Toggle”,
“disabled”: false,
“info”: “”
},
{
“id”: “alarm_input”,
“type”: “victron-input-digitalinput”,
“z”: “alarm_toggle_flow”,
“service”: “com.victronenergy.digitalinput.input_01”,
“path”: “/Count”,
“name”: “Alarm Pulse Input”,
“x”: 150,
“y”: 120,
“wires”: [[“filter_pulse”]]
},
{
“id”: “filter_pulse”,
“type”: “rbe”,
“z”: “alarm_toggle_flow”,
“name”: “Alleen bij nieuwe puls”,
“func”: “rbe”,
“gap”: “”,
“start”: “”,
“inloop”: “false”,
“septonic”: false,
“x”: 380,
“y”: 120,
“wires”: [[“toggle_logic”]]
},
{
“id”: “toggle_logic”,
“type”: “function”,
“z”: “alarm_toggle_flow”,
“name”: “Toggle 0% / 100%”,
“func”: “let lightStatus = context.get(‘lightStatus’) || 0;\n\n// Als de lamp uit is (0), zet hem op 100. Anders op 0.\nif (lightStatus === 0) {\n lightStatus = 100;\n} else {\n lightStatus = 0;\n}\n\ncontext.set(‘lightStatus’, lightStatus);\nmsg.payload = lightStatus;\nreturn msg;”,
“outputs”: 1,
“noerr”: 0,
“initialize”: “”,
“finalize”: “”,
“libs”: ,
“x”: 610,
“y”: 120,
“wires”: [[“lamp_output”]]
},
{
“id”: “lamp_output”,
“type”: “victron-output-pwm”,
“z”: “alarm_toggle_flow”,
“service”: “com.victronenergy.pwm.output_01”,
“path”: “/Level”,
“name”: “GX Lamp Output”,
“x”: 820,
“y”: 120,
“wires”:
}
]

There are errors in the json formatting so I can’t import it.
Try use an inject node directly into the IO extender. See if that works fine.

Hi Nick,

Thank you so much for your reply. I will test this at the weekend if that is working better.

KR. Stefan

Hi Nick,

So I am at the boat right now. I have dan a complet factory reset of the Cerbo GX so I am sure nothing else is in the way. I updated to FW 3.72~5.

In node red I imported the flow again and added a inject node. When I press that, lights go on inmediately. I changed the pulse count to: burglar alarm, fire alarm.

In the boat I made a fysical pulse button which “shorts” the digital input. I need to hold the button for 2 seconds to get a pulse to node red and turn the ligths on or off.

Hopefully you know something I am doing wrong. But if this is by design I am really screwed :frowning:

KR Stefan

Do you have any rate limits set in the other nodes?
The filter is superfluous as the victron nodes can be configured to only send changes and to rate limit.

Hi Nick,

This is the input node. No rate limits set in any nodes.

If I push the pulse switch to turn the lights on the green counter beneath the input node:


Does not change on short hold. If I hold it longer, like a second, it will trigger it.

Is this what you wanter to know, sorry I am not new but also really no expert :frowning:

Thanks again!

Little bit use of Gemini:

Reasons for Slow Response

  • Slow Input Hardware/Software: Digital inputs can ignore pulses that are too short, generally needing a pulse width of >800ms to be reliably detected.

  • D-Bus Polling Interval: Victron input nodes often poll the D-Bus every 5 seconds, although changes should trigger an update sooner. If the system is busy, these updates lag.

  • High CPU Load: Complex Node-RED flows can overload the Cerbo processor. If the CPU usage is constantly high (>90%), Node-RED will become laggy.

  • Modbus TCP Interference: Leaving Modbus-TCP server enabled while not using it can increase CPU load.

    Can this be the answer to my issue: Generally needing a pulse width of >800ms to be reliably detected?

Maybe try a different type of switch?
The delay seems to be detecting its being pressed. There is a touch switch option as well and others.

Hi Nick,

Thnx. Will try this tomorrow on the boat.

I will let you know!

Hi Nick,

The only one I did not use yet wat the touch controll switch but this is a complete differtent thing. I controlls the enable/disable of the GX touch screen…

I am really out of options I guess and hoping you maybe have some tips. I also did send a support request to Victron.
I have bought 2 x GX IO 150 extenders for this sollution which now seems to be not working by design :frowning:

Thank you again for all your help and if you think of something please let me know.

KR Stefan

Hi Nick (and everyone else with the same issue),

I got answer from Victron itself:
The inputs of the IO extender are polled because interrupts are not supported (like they are for the GX’s internal digital inputs). The inputs are polled at a fixed rate of once a second.
So to reliably count pulses with the IO extender, the input should not change more often than once a second.

I am going to try the digital inputs on de Cerbo GX itself and that should work if I read it correctly.

Kind regards,

Stefan

1 Like

That is good to know. Thanks.