The community Somfy ZRTSI driver by Justin Walker (@augoisms) lets you send the MyPosition (Stop) command. I use it on our 5 Somfy drapes (well, one is a group of 2 in the bedroom that move together, so it’s really 6 Glydea motors) and it works well.
[RELEASE] Somfy ZRTSI
As far as Z-Wave is concerned, the ZRTSII node a Motor Control Class A device with no ability to set position, report current position or even when an endpoint has been reached. In simpler terms, it's a one-way interface with only open/close/stop commands. "1255" is an out of range value, so I'm not sure how this would work...
To my knowledge, the only way to implement a "My" position, or any other position, is to track the position based on travel time. If anyone knows of a different approach to this, I'm all ears...
The way My Position works is that you use the manual controls to move the drapes (or shades) to a desired favorite position and then push the stop button on the control to stop motion. Then, push and hold hold the Stop button in until the drapes (or shades) “jog”, indicating that the favorite position had been memorized. From then on, if the drapes (shades) are moving and a Stop is received, the drapes (shades) will stop, as usual. However, if the drapes (shades) are not moving and a Stop command is received, the drapes (shades) move from wherever they are to that favorite position previously set.
In short, the Stop serves both functions - there is no “move to my favorite position” command.
Hope that helps.
Very interesting! I've definitely missed that in the Somfy doc. I'll have to set it up and test.
I could add it to the driver... but I'm curious... what would you see the value of using the pre-recorded My position vs using setPosition(X)?
I can only speak for the drapes, which know how many times the motor turns, and thus know exactly where the position of the track ribbon is. They seem to save the My Position setting as motor rotation position. It's exact.
That's why Justin Walker (@augoisms) did the clever hack of, whenever his driver receives a set position (dimmer position) of 50, it just sends a Stop command rather than trying to figure out where to go.
You are right, the ZRTSI is dumb, knows nothing about position. All of the positioning is done in the motor. That's why the motor, on initial power on after reset, does the calibration to find the center and end stop positions.
The driver already has the ability to set any arbitrary position between 0 and 100, so I guess what I'm asking is... if I were to add a My position command (which I can do), what would the advantage be of using My position vs just using setLevel(35)?
I understood what you were asking. By my reading of your code (and of Justin Walker's), you scale the desired position by the open/close transit time, and the accuracy depends on that. At least with my drapes, sometimes, on cold days, or if the cat is sitting on the drapes, it takes longer to open/close than other times. The MyPosition point is exact - it depends on how many times the motor turns, not on a guess about how long the drapes take to open/close, or variations in how fast the motor moves on that day.
I only use the driver like the Somfy controls - to open the drapes (fully), to close the drapes, and to move to My Position. I doubt that anyone uses the drivers to open to 10%, etc., because the Telis hand controls and Decoflex wall controls don't do that.
Okay, your logic makes sense. I'll have a look at adding it.
I haven't experienced any issues with variance on motor operation due to temperature, but the cat thing kinda makes sense. I don't have a cat, so I've never actually seen the issue myself.
My traverse times have always been within a quarter second or so, but I have my drapery motors on the slowest (quietest) setting specifically for that reason. However I have had issues with delays in the Z-Wave network. It's been on my list to change the driver so it doesn't count movement until I receive an ack from the node, but it just keeps falling to the bottom of the list. Maybe I can do these at the same time. I'll let you know when I've implemented it.
Thank you again for the information!