I’m a relative noob to Home Assistant so forgive me if I’ve missed something obvious but I can’t seem to figure this one out.
I have an Insteon 2334-232 6-Button KeypadLinc Dimmer and a 2475F FanLinc Ceiling Fan and Light Control. I’ve linked them with the Insteon integration so they show up in the dashboard and are controllable from within Home Assistant. I’ve set up local links between the two devices because I need everything to work even if HA is offline. I’ve set it so A = Fan High; B = Fan Med; C = Fan Low; D = Fan Off.
After I set up those local links, I did the procedure outlined in this Insteon KB page: Keypad Button Grouping for Fanlinc Control — Insteon. That makes it so when you toggle A, B, C, or D it will turn off the other 3 buttons so the button LEDs stay in sync with the physical scene. That process worked great and now the button LEDs are in sync with the physical scene. Meaning for example if A is active (A button LED turned on) and I then press C, the A-button LED turns off and the C-button LED turns on.
The problem is that the virtual switches in the HA dashboard do not match because they don’t have any similar button grouping logic to control their states and I guess no other mechanism to ensure their states stay in sync.
Any ideas how I can solve for this?
Can you enumerate a use case - show us how it gets out of sync and why?
This video shows the problem better than I explain via text. Sorry for crappy quality but best I could do within the forum picture file size limit
Thanks for that video… It appears that some of the changes on the physical switch are also however reflected in the UI. I would therefore suggest closely examining the logic to see if there is a workaround - such as whenever one of the buttons in the UI is turned on, to have an automation in that will then turn off all of the other buttons in that group (even thought they may already be off)…?
Yea turning the physical switch ON updates in the UI. Also pressing the same physical switch again to turn it off also reflects in the UI. It’s just that when one switch is on and I then press another switch to turn it on, the UI does not update to reflect that the first physical switch has been turned off.
I would have thought that if the physical switch state is changing to OFF (due to internal switch programming logic), then the KeypadLinc would send a corresponding cleanup message to update the hub (in my case an Insteon 2448A7 USB Adapter) so it knows that button was changed to OFF. I am not sure how to interpret the logs to verify whether that is happening or not. I see that there are two cleanup messages sent from the KeypadLinc to the USB stick but I am not sure what the flags/cmd1/cmd2 part mean.
Debug logs below if anyone can help me interpret them:
- KeypadLinc address = 43a327
- USB stick address = 3117c2
- FanLinc address = 3f4bf0
1st Debug log shows pressing a different button which should turn on that button and turn off the previously active button (but the UI does not update to reflect that previous button is now OFF)
- Button B was ON > started logging > pressed physical Button A > stopped logging
2nd Debug log shows messages relating to pressing the same physical button to turn it off (which does update the UI)
- Button A was ON > started logging > pressed physical button A > stopped logging
Questions:
- Is the KeypadLinc sending the cleanup command to update the previous button’s state (and then something is failing to update the UI) or is the KeypadLinc not sending that cleanup command at all?
- Is it normal for a single physical button press to result in 81 duplicate insteon.button_on events?
- I noticed that for 99% of my Insteon devices, on the device page it shows “Engine Version: i2cs”…but on this KeypadLinc and on my FanLinc they both show “Engine Version: unknown”. Anyone seen that - is it an actual issue and if so how might I fix it?
I admire your efforts to fix something like this the “right way” by getting to the ‘root’ of the issue for rectification as a “purist”. However as a programmer from way back I have found it is actually also a good practice to write additional logic to be able to handle things like this. So, I encourage you to find the root issue - but also encourage you more to put logic into your code so that whenever one of the buttons is turned on that all of the other buttons in that group are also turned off by the code. This also helps you in that if there is a firmware/hardware/software release in the future that reintroduces a bug - you don’t have to live a nightmare getting them to fix it as your coding around it makes it more robust and still just works for the end user.
To each his own!