Hello, I‘m wondering whether it is possible that OpenHAB can „detect“ a manually triggered Rollershutter command. With „manually triggered command“ I mean an „Up/Down“ command given by the physical wall switch/button. Does anybody know if that would be possible in conjunction with the KNX or LCN Home Automation binding? Thanks for a short hint on that.
It can be done but it isn’t super easy. See Design Pattern: Manual Trigger Detection. However, the challenge here will be that when you manually press the UP/DOWN button, you are unlikely to get that back into OH as a command. Instead OH will probably just start seeing the Rollershutter’s Percent value changing. So you will have to infer that if the rollershutter starts moving and OH didn’t issue a command first that it was manually commanded.
The KNX binding does allow for ‘control’ devices - that is to say, something like a wall panel button that controls other devices. Listening to that kind of device will allow you to detect manual button pushing.
That sounds interesting, thanks a lot for that hint. Basically I want to use that approach to „track“ the position of my Rollershutters. My rollershutters can be controlled either via OH (UI, rules, voice command) or manually. Whereas the tracking of position is quite easy on every move that was triggered via UI, rule or voice command, the position tracking gets „disturbed“ if a manual command was triggered in between. To overcome that my idea is as follows (in very short words):
- I know the current position of the rollershutter (from a previous move via UI, rule or voice command)
- When I push the wall button then, OH will detect that and will start a stop watch that counts the time until I release the button again
- Based on the counted time I can calculate the new position of the rollershutter
Would that approach work, what do you think? What is not fully clear to me so far, how can I best code the step 2.? Would be really great to get some hints and support on that.
Another question is, how can OH detect, whether the manual command was an UP or DOWN command? Will that automatically be detected correctly by the binding?
Thanks and best regards
Over time the actual position of the rollershutter and what OH thinks it is will drift apart. The problem is there is latency all over the place that is of a non-determinate length so one time it may take 100 msec for OH to detect that the wall button was pressed and next time take 20 msec. In the mean time, the roller shutter is moving and OH won’t know about it. It won’t take too many button presses before you are 25-50% off between what OH thinks the position is and what the actual position is.
Trigger a Rule when OH detects that the rollershutter starts moving. Take a time stamp. Trigger another Rule when OH detects that the rollershutter stops moving. Based on the time elapsed, calculate the new position.
If that isn’t handled by the binding then the answer is “you can’t.” See rossko57’s reply though, there may be a way to configure the controller so it reports the button presses.
But like I say above, I’m skeptical that this would ever work well enough in the long run to be worth attempting. To make it work you either need to calibrate the rollershutter on each command (e.g. close all the way and then move to the desired percent open) or have some sort of sensor that can tell you the actual position of the screen.
There might be opportunity for a halfway house solution - “self calibration” invoked each time you know that you’ve run to an end stop e.g. your calculated position would be 110% or -10% so of course you can reset to 100 / 0%.
As Rich says, it’s horrid. Perhaps if you confess the model of rollershutter, there might be more help?
Yes, that drift problem I‘m aware of. My idea to overcome that would be to make a „reset“ on a regular base by moving the shutters to 0% or 100%. By the way, in my house a LCN Bus System is installed, e.g, the rollershutters are controlled by that LCN Bus.