Homebridge extension to control iPort Surface mount with buttons

Job ID: 36653831

Budget: €30 – €250 EUR

I have an iPort surface mount with 10 buttons (product link: https://www.iportproducts.com/Product/smb) and i wish to control this with homekit app. I use homebridge running on a Raspberry Pi for non-compatible homekit devices so i need someone to create a homebridge compatible extension. You can find details about it's configuration here: https://iport.squarespace.com/smbuttonsconfig
It's a simple frame with 10 RGB LED buttons and each button has two states either it's idle or it's being pushed.

When i telnet the device on it's static IP 192.168.2.12 and port 10001 i get this:

{"deviceid":"SurfaceMount","model":"iPortSM10B","macaddr":"DC82F60009DD","versio
n":"V6","uptime":"1834442889","keys":[{"label":"key 1","state":"0"},{"label":"ke
y 2","state":"0"},{"label":"key 3","state":"0"},{"label":"key 4","state":"0"},{"
label":"key 5","state":"0"},{"label":"key 6","state":"0"},{"label":"key 7","stat
e":"0"},{"label":"key 8","state":"0"},{"label":"key 9","state":"0"},{"label":"ke
y 10","state":"0"}]}

After pushing one of 10 buttons (button number 5) it gets to state "1":

{"deviceid":"SurfaceMount","model":"iPortSM10B","macaddr":"DC82F60009DD","version":"V6","uptime":"1834481454","eventtime":"63278","events":[{"label":"key 5","state":"1"}]}

When i release the button it gets again to state "0":

{"deviceid":"SurfaceMount","model":"iPortSM10B","macaddr":"DC82F60009DD","version":"V6","uptime":"1834481574","eventtime":"63398","events":[{"label":"key 5","state":"0"}]}

If i keep pushing the button (i push button number 4 this time) it returns again and again state "1" until i release it and then it returns to state "0":

{"deviceid":"SurfaceMount","model":"iPortSM10B","macaddr":"DC82F60009DD","version":"V6","uptime":"1834509314","eventtime":"25602","events":[{"label":"key 4","state":"1"}]}
{"deviceid":"SurfaceMount","model":"iPortSM10B","macaddr":"DC82F60009DD","version":"V6","uptime":"1834510316","eventtime":"26604","events":[{"label":"key 4","state":"1"}]}
{"deviceid":"SurfaceMount","model":"iPortSM10B","macaddr":"DC82F60009DD","version":"V6","uptime":"1834510617","eventtime":"26905","events":[{"label":"key 4","state":"1"}]}
{"deviceid":"SurfaceMount","model":"iPortSM10B","macaddr":"DC82F60009DD","version":"V6","uptime":"1834510918","eventtime":"27206","events":[{"label":"key 4","state":"1"}]}
{"deviceid":"SurfaceMount","model":"iPortSM10B","macaddr":"DC82F60009DD","version":"V6","uptime":"1834511219","eventtime":"27507","events":[{"label":"key 4","state":"1"}]}
{"deviceid":"SurfaceMount","model":"iPortSM10B","macaddr":"DC82F60009DD","version":"V6","uptime":"1834511520","eventtime":"27808","events":[{"label":"key 4","state":"1"}]}
{"deviceid":"SurfaceMount","model":"iPortSM10B","macaddr":"DC82F60009DD","version":"V6","uptime":"1834511821","eventtime":"28109","events":[{"label":"key 4","state":"1"}]}
{"deviceid":"SurfaceMount","model":"iPortSM10B","macaddr":"DC82F60009DD","version":"V6","uptime":"1834512122","eventtime":"28410","events":[{"label":"key 4","state":"1"}]}
{"deviceid":"SurfaceMount","model":"iPortSM10B","macaddr":"DC82F60009DD","version":"V6","uptime":"1834512423","eventtime":"28711","events":[{"label":"key 4","state":"1"}]}
{"deviceid":"SurfaceMount","model":"iPortSM10B","macaddr":"DC82F60009DD","version":"V6","uptime":"1834512943","eventtime":"29011","events":[{"label":"key 4","state":"0"}]}

There is also an optional LED RGB color changing option for the buttons when being pressed and i'm not very sure how it can be done but i've captured network traffic between my PC and the mount frame with wireshark when this happens and you can find the info captured in the attached file.

You can also find attached a PDF file describing the device and the API.

Of course i can give you access to my LAN to test the device if you need to.
Related categories: Plugin HomeKit JSON Raspberry Pi Apple Homekit