Hi,
I have a pushbutton that can have only two states: Open and Closed. I want to use it with single and double clicks. For example when I click the button twice within 750 millisecs it should switch lamp 1 on, if I push the button once (= more than 750 ms after the previous click) lamp 2 must be switched on. I know how to describe in normal language but am not able to translate it to dzVents:
- when the button is clicked check if it was last clicked less than 750 ms before
- if yes then switch on lamp 1, if no then wait for 750 ms max
- if there's no new click within 750 ms then switch on lamp 2
I hope someone can help me!
Thanks in advance!
Peter
Doubleclick with a simple pushbutton
Moderator: leecollings
- waaren
- Posts: 6028
- Joined: Tuesday 03 January 2017 14:18
- Target OS: Linux
- Domoticz version: Beta
- Location: Netherlands
- Contact:
Re: Doubleclick with a simple pushbutton
Can you please show the loglines where the clicks are registered? This to be certain the 750 ms are recognized by domoticz. If domoticz does not get these clicks at the interval you need, dzVents cannot help.peterbos wrote: Monday 23 November 2020 13:47 I have a pushbutton that can have only two states: Open and Closed. I want to use it with single and double clicks.
Debian buster, bullseye on RPI-4, Intel NUC.
dz Beta, Z-Wave, RFLink, RFXtrx433e, P1, Youless, Hue, Yeelight, Xiaomi, MQTT
==>> dzVents wiki
dz Beta, Z-Wave, RFLink, RFXtrx433e, P1, Youless, Hue, Yeelight, Xiaomi, MQTT
==>> dzVents wiki
-
peterbos
- Posts: 93
- Joined: Saturday 07 November 2020 21:41
- Target OS: Raspberry Pi / ODroid
- Domoticz version: beta
- Contact:
Re: Doubleclick with a simple pushbutton
Hi Waaren,
I use the Aqara Door & Windows sensor with the reed contact being replaced by a pushbutton. I tried two double clicks:
2020-11-23 14:33:21.146 Status: dzVents: Info: Handling events for: "PushButton", value: "Closed"
2020-11-23 14:33:21.388 Status: dzVents: Info: Handling events for: "PushButton", value: "Open"
2020-11-23 14:33:21.685 Status: dzVents: Info: Handling events for: "PushButton", value: "Closed"
2020-11-23 14:33:21.919 Status: dzVents: Info: Handling events for: "PushButton", value: "Open"
2020-11-23 14:33:40.101 Status: dzVents: Info: Handling events for: "PushButton", value: "Closed"
2020-11-23 14:33:40.171 Status: dzVents: Info: Handling events for: "PushButton", value: "Open"
2020-11-23 14:33:40.256 Status: dzVents: Info: Handling events for: "PushButton", value: "Closed"
2020-11-23 14:33:40.421 Status: dzVents: Info: Handling events for: "PushButton", value: "Open"
The time between the two "Closed" values is 539 and 155 milliseconds - well under 750.
Yours,
Peter
I use the Aqara Door & Windows sensor with the reed contact being replaced by a pushbutton. I tried two double clicks:
2020-11-23 14:33:21.146 Status: dzVents: Info: Handling events for: "PushButton", value: "Closed"
2020-11-23 14:33:21.388 Status: dzVents: Info: Handling events for: "PushButton", value: "Open"
2020-11-23 14:33:21.685 Status: dzVents: Info: Handling events for: "PushButton", value: "Closed"
2020-11-23 14:33:21.919 Status: dzVents: Info: Handling events for: "PushButton", value: "Open"
2020-11-23 14:33:40.101 Status: dzVents: Info: Handling events for: "PushButton", value: "Closed"
2020-11-23 14:33:40.171 Status: dzVents: Info: Handling events for: "PushButton", value: "Open"
2020-11-23 14:33:40.256 Status: dzVents: Info: Handling events for: "PushButton", value: "Closed"
2020-11-23 14:33:40.421 Status: dzVents: Info: Handling events for: "PushButton", value: "Open"
The time between the two "Closed" values is 539 and 155 milliseconds - well under 750.
Yours,
Peter
- waaren
- Posts: 6028
- Joined: Tuesday 03 January 2017 14:18
- Target OS: Linux
- Domoticz version: Beta
- Location: Netherlands
- Contact:
Re: Doubleclick with a simple pushbutton
The script logic could look like below. I tested it with a normal switch and somewhat longer times so I would not be surprised if the domoticz timings are not accurate enough for your requirement.. but it's worth a trypeterbos wrote: Monday 23 November 2020 14:45 The time between the two "Closed" values is 539 and 155 milliseconds - well under 750.
Code: Select all
return
{
on =
{
devices =
{
'PushButton',
},
customEvents =
{
'Single Click',
},
},
logging =
{
level = domoticz.LOG_DEBUG, -- set to domoticz.LOG_ERROR when all ok
marker = 'Double click',
},
data =
{
millisecondsAgo =
{
initial = -1,
},
},
execute = function(dz, item)
dz.log('at script start ' .. dz.data.millisecondsAgo, dz.LOG_DEBUG )
lamp1 = dz.devices('lamp1')
lamp2 = dz.devices('lamp2')
if item.isCustomEvent then
dz.log("item.isCustomEvent --> " .. dz.data.millisecondsAgo ,dz.LOG_DEBUG)
if dz.data.millisecondsAgo ~= -1 then
dz.log("dz.data.millisecondsAgo ~= -1 -->> " .. dz.data.millisecondsAgo ,dz.LOG_DEBUG)
lamp2.switchOn()
dz.data.millisecondsAgo = -1
end
return
end
if item.state == 'Close' and dz.data.millisecondsAgo == -1 then
dz.log("item.state == 'Close' and dz.data.millisecondsAgo == -1" , dz.LOG_DEBUG)
dz.data.millisecondsAgo = 0
dz.emitEvent('Single Click').afterSec(1)
elseif item.state == 'Open' and dz.data.millisecondsAgo == 0 then
dz.log("item.state == 'Open' and dz.data.milliSecondsAgo == 0" , dz.LOG_DEBUG)
dz.data.millisecondsAgo = item.lastUpdate.millisecondsAgo
elseif item.state == 'Close' then
dz.log("item.state == 'Close' -->> " .. item.lastUpdate.millisecondsAgo .. ' ' .. dz.data.millisecondsAgo ,dz.LOG_DEBUG)
if ( dz.data.millisecondsAgo + item.lastUpdate.millisecondsAgo ) < 750 then
dz.log("dz.data.millisecondsAgo + item.lastUpdate.millisecondsAgo ) < 750 --> " .. dz.data.millisecondsAgo ,dz.LOG_DEBUG)
lamp1.switchOn()
dz.data.millisecondsAgo = -1
end
end
end
}
Debian buster, bullseye on RPI-4, Intel NUC.
dz Beta, Z-Wave, RFLink, RFXtrx433e, P1, Youless, Hue, Yeelight, Xiaomi, MQTT
==>> dzVents wiki
dz Beta, Z-Wave, RFLink, RFXtrx433e, P1, Youless, Hue, Yeelight, Xiaomi, MQTT
==>> dzVents wiki
-
peterbos
- Posts: 93
- Joined: Saturday 07 November 2020 21:41
- Target OS: Raspberry Pi / ODroid
- Domoticz version: beta
- Contact:
Re: Doubleclick with a simple pushbutton
Hi Waaren,
Your script got me in the right direction. It took me two nights of trial and error but I simplified it and made it into something that suits me even better: a single push button selector switch with virtually unlimited positions. I dropped the 750 ms and used the 1 second of the afterSec() command. I also used a virtual On/Off switch named MultiClick.
I tested it and found no problems. Great solution: with a relatively cheap push button (I bought mine for 13 euros) you can maken a great switch.
Yours,
Peter
Your script got me in the right direction. It took me two nights of trial and error but I simplified it and made it into something that suits me even better: a single push button selector switch with virtually unlimited positions. I dropped the 750 ms and used the 1 second of the afterSec() command. I also used a virtual On/Off switch named MultiClick.
Code: Select all
return
{
on =
{
devices =
{
-- the real push button
'Schakelaar - Test',
-- the virtual on/off switch
'MultiClick',
},
},
data =
{
Clicks =
{
initial = 0,
},
},
execute = function(dz, item)
if (item.name == 'Schakelaar - Test') and (item.state == 'Closed') then
-- cancel any previous setState() commands which were issued less then 1 second ago
dz.devices('MultiClick').cancelQueuedCommands()
-- increase the number of clicks
dz.data.Clicks = dz.data.Clicks + 1
-- give the next setState() command
-- this command will succeed if it's the last time the button is pushed
-- otherwise it will be canceled too
dz.devices('MultiClick').setState('On').afterSec(1)
return
end
if (item.name == 'MultiClick') and (item.state == 'On') then
-- dz.data.Clicks now holds the number of times the switch was clicked
-- so do some action here, based on the number of clicks
-- before the virtual switch and the number of clicks will be reset
dz.devices('MultiClick').setState('Off').silent()
dz.data.Clicks = 0
return
end
end
}
Yours,
Peter
Who is online
Users browsing this forum: No registered users and 1 guest