I’ve spent a good amount of time researching this issue. Here are my comments and observations that might be helpful.
I point the blame at how the homekit protocol works.
My first example is from my first time noticing this issue. I had Insteon dimmers with the official Insteon<->homekit hub. This is from back when Insteon sold and marketed as being “homekit compatible” and was actually listed on apple.com as a homekit partner. These days are over.
Anyway - this official hub had the same issue where if I had a light that was on then slid the dimmer the light would flash to 100% - then drop to the new dimmer level. Often it would get stuck at 100%. If I used siri (set light to 75%) that worked every time.
Fast forward to openhab when I first started, I noticed the same problem. My first solution (which worked great!) was to use rules and proxy items (linked above). This seemed very clunky to me and caused me to have double the number of items for my dimmers.
Next solution was to switch over to node-red for my homekit setup. This has really worked well. I have been able to program my javascript functions around the seemingly odd behavior of the homekit protocol. The other bonus of this is I can actually see each and every command coming from homekit into my workflow.
As I have stated above and in other threads, homekit deals with on/off as a message that says “ON=true” or “ON=false” - in doing this it remembers the previous brightness level of each dimmer so that if you have it at 10%, tell siri to turn it off, then tell siri to turn it back on - it assumes you’re coming back on at 10%. What happens in the message sending then is the previous 10% command is not re-sent. The only command will be ON=false to turn off then ON=true to turn it back on - assuming the lamp remembers it’s previous level just as well.
Oh did I mention the ON sometimes comes first and the brightness sometimes comes first?
The solution some people have used is to just ignore the ON messages and use the dimmer % messages. This won’t work in the cases where homekit only sends on. Well what about if we ignore the ON messages? Turns out the dimmer % message is also not always sent.
Extra messages can be sent into homekit anytime - but there needs to be something in the program to remember the previous brightness value of the dimmer for the case that homekit just says “ON=true”.
The fact that this all happens on every platform points to it being a confusing part of the homekit protocol rather than an issue with openhab. The writers of the openhab plugin just have not added in a way to handle it.
For even more fun, I believe this is the case with HSV colored bulbs as well. The ON message may or may not be accompanied by an HSV message.