Here is the final neo keypad integration in all its ridiculous glory. For pushing the buttons I originally used 10 relays in an array of 5x5, joined at common, so when the coordinates of any two relays are called, the corresponding two points on the keypad’s button matrix are connected pushing the intersecting button. For example, X1,Y1 pushes 1, X2Y2 pushes 5, etc. My button pushing function also takes a delay variable so you can control the length of the push, for example, holding down the function buttons for arming etc. I am controlling all 25 buttons with 10 gpio pins.
I then created a compact pcb using optocouplers that the esp32 devkit plugs into that reduces everything down to a very practical size (see the update below).
Mqqt is used to communicate between the controller and Home Assistant to update the virtual lcd status and tell the controller what buttons to push.
You can also use the keypads auto scroll faulted zones function to trigger input booleans and sensors in home assistant for each zone when the corresponding zone fault displays on the lcd. The zone can be reset when “System is Ready to Arm” is re-displayed, or if there are multiple zone faults, after a certain time period passes without the zone re-appearing in the scrolling list as one of the faults.
The original prototype using relays:
Update on Jan. 1, 2024:
I have now designed a compact pcb that uses an array of optocouplers instead of relays and has female headers to plug the ESP-32-S3-Devkit-C1 into it. It reduces everything down to a size just a little larger than the esp32s3 dev board. Also without the 5V relays the entire board can run off the keypads 3.3V and no longer needs any external power supply. The LEDs indicate which optocoupler coordinates are called when you push the buttons on the virtual keypad. I also made a slightly smaller version with the LEDs removed.
My new compact pcb with esp32s3 devkit:
The new setup next to the keypad and installed in a network cabinet.
The Home Assistant virtual keypad:
I now have a fully functional virtual keypad in Home Assistant and can monitor my zones and integrate with other automations. For the keypad I simply used a markdown box for the lcd message and a grid of buttons for the keypad buttons. The virtual keypad is very responsive and works just like a physical keypad. I also got Home Assistant’s Alarm Panel template working with the integration as well, but I find the virtual keypad much more functional.