This my attempt to bring control of twinkly devices to the kotlin world.
It is based on these projects:
Also contained is a stripped down and kotlinized version of minim by Damien Quartz which only supports line in currently. The original implementation which was meant to be used within the processing framework can be found here: https://github.com/ddf/Minim/tree/main
Involved is also some reverse engineering from the official twinkly android app. But this turned out to be a waste of time as there are a lot of details lost in the decompilation process. F.e. the list of supported devices does not contain all products which are officially supported and work within the app (such as the Curtain 210 which I own). Also a lot of code which is originally kotlin cannot be reversed to useful code a lot of ends up in outcommented assembler or signature descriptions. So for now we have say big thanks to the people who have found so much.
Another mystery was the usage of playlists and movies. I was actually able to upload a new movie but it turned out that I just messed up an existing movie which was actually in my playlist. Creating a new movie did not succeed even I got an expected answer from the api.
Because of that fact that I cannot get the movie features to work properly for me I insteaddo the same thing it seems all the others do - I use the realtime frame feature which utilizes the UDP protocoll to upload binary frame data to the device. This works really fast over WLAN and makes possible impressive framerates. Of course this approach has the downside that it depends on a WLAN connection and a player software. On the other hand this allows for a lot of fun stuff.
This project is far from feature complete, but I think it`s now good enough to see the light of the world :)