Timer with time depending on number of presses

Ik heb een ventilatietoestel met een externe sturing aangesloten op een relais van Velbus.
Als de relais sluit gaat de ventilatie gedurende 30 minuten in een hogere stand.

Ik heb een drukknop aangesloten op een 7-kanaalsingang module.

Ik wil het volgende gedrag. Als ik vijf keer druk op de drukknop, na elkaar, wil ik dat:

  1. de relais sluit nu efkes (bv. 1 sec)
  2. en binnen een half uur nog een keer kort (bv. 1 sec)
  3. en binnen een half uur nog een keer kort (bv. 1 sec)
  4. en binnen een half uur nog een keer kort (bv. 1 sec)
  5. en binnen een half uur nog een keer kort (bv. 1 sec)

Een relais die elke half uur een keertje sluit dat kan ik wil programmeren.
Maar ik wil dus dat het aantal keer dat het gebeurt afhangt van het aantal presses.
Ik moet dus een functie vinden waarbij de “tijd” telkens maar aangroeit telkens je een keer extra drukt.

Dus als ik 3 keer press op de drukknop → dan zal de ventilatie 90 minuten aan zijn.

Ik gebruik velbuslink.

Hoe kan ik dat doen?

That’s an interesting use case.

To do it purely in Velbus would be difficult.

You can’t increase the running time of an active timer, you can only issue a new timer with a new run time.

You could use the multi press feature (if you sacrifice other input channels) you can set an increased time for each “button event”.

Example :

Physical connection of your button to input 1 with action of 30 minute timer - button mode "multi)

Button 2 - 60 minute timer

Button 3 - 90 minute timer

And so on

However, if you wanted to do something with software like Node-RED.

It would be very easy to create a flow that monitored the button event from VMB7IN

Each time the button is pressed a running timer on Node-RED could be started or increased. (With relay being Closed)

When the timer expires, the relay is Opened.

I’d be happy to help with the Node-RED flow development, because I think it would be interesting.

I would be interested in other people’s ideas for solutions to this.

with openhab rules this could be a lot easier…

you define a global variable (timeSeconds) and then in a rule you increase it when required…

var int timer = 0
rule IncreaseTimer
when
channel velbus:buttonX
then
timer=timer + 60
fanchannel.sendCommand(ON)
while (timer >0) {
Thread::sleep(10000) // 10 seconds
timer = timer - 10
}
if (timer <0) {
fanchannel.sendCommand(OFF)
timer = 0
}
end

This essentially sets a global variable - and everytime you press the button it adds 60 seconds to it… then when you pressed the button it sends the ON command to the fan and starts a timer. every 10 seconds the script checks if the timer is below 0 seconds… if so, it will send the OFF command and set the timer back to 0 (as it could be negative)

(didnt test - but should look something like this)

1 Like

Jammer dat niets mogelijk is met het hoofdprogramma.
Het zou wel een goede verbetering zijn als de multi-press functionaliteit of de 7-kanaals ingangsmodule ook zou werken op alle andere modules, bv. de glazen paneeltjes. Deze hebben heel wat kanalen wat veel mogelijkheden geeft.

Iets doen afhankelijk van hoeveel na elkaar je drukt, lijkt me een nuttig algemeen principe.

:wink:
Have a look at the configuration for Oled panels