MylesMor / nanoleafapi

A Python3 wrapper for the Nanoleaf OpenAPI, for use with the Light Panels, Canvas and Shapes (Hexagons, Triangles and Elements).
https://nanoleafapi.readthedocs.io
MIT License
59 stars 15 forks source link

Registering to touch stream data #16

Open jfechete opened 1 year ago

jfechete commented 1 year ago

I added two parameters to the register_event method that allows receiving from the touch stream data.

MylesMor commented 1 year ago

Hi, thank you for the contribution! I haven't really done much digging into the touch stream data - can you briefly tell me what it does and provide an brief code example so I can try it out myself? Thank you!

jfechete commented 1 year ago

Sure, here's the description from the documentation: "As of firmware version 1.4.0+, clients will be able to optionally register for fine resolution, low latency, touch data stream from the canvas controller over a UDP socket, if the client has also registered for Touch Events." Here's some example code:

from nanoleafapi import Nanoleaf
CANVAS_IP = "192.168.0.159"
TOUCH_DATA_PORT = 60233

def main():
    nl = Nanoleaf(CANVAS_IP)
    nl.register_event(handle_event,[4],TOUCH_DATA_PORT,handle_touch)
    input()

def handle_event(data):
    print("event")
    print(data)

def handle_touch(data):
    print("touch")
    print(data)

if __name__ == "__main__":
    main()

And here's some of the output I got when swiping from one panel to another:

touch
{'panelId': 62063, 'touchType': 'Swipe', 'touchStrength': 9, 'panelIdFrom': 33779}
event
{'events': [{'panelId': -1, 'gesture': 5}]}
MylesMor commented 1 year ago

Awesome, thank you. Will hopefully get around to trying out this week and if all looks good I'll merge it in. Thanks!