Closed fribse closed 3 years ago
I was also looking to use your version as a template to let it run on a pi and integrate with home assistant. I hit a small (or rather big) roadblock though. I used your GUI to create a random setting of bytes, including the checksum, and sent it via bleak to my Neewer 660. It went through without error messages but nothing at all happened. Then I also tried to write it manually to the characteristic via nRF from my phone - also no change in the light at all.
Is there something I am missing?
I am using the below from Python:
await client.write_gatt_char("69400002-b5a3-f393-e0a9-e50e24dcca99", bytearray([0x78, 0x87, 0x2, 0x37, 0x1, 0x39]))
Any help would be very appreciated and of course I am also happy to test.
Thanks @fribse! - I'm writing it with the intention to use it on a Pi, but at the moment I haven't written a command line interpreter (all of my current program is the GUI based one, but I want to write a command-line only version that can work without the GUI as well). The current version I have on GitHub (I really need to post the latest version, I will do that in a few hours) is only the GUI, without the bleak integration, but I do have a working prototype that does control the lights - it's not 100% where I want it to be yet, but it does work.
@dd871 - I was thinking about this, and then I remembered - I initially reversed the values for brightness and hue on the CCT mode calculations (because HSV mode uses color as the first variable, but CCT mode does not) and I must have fixed that on my end after this current commit - so that will be fixed on the next commit, but try testing out this value instead: [0x78, 0x87, 0x2, 0x1, 0x37, 0x39] - 0x1 is the brightness (1%), and 37 is the temp (5500K), the checksum should still be the same - this order should work.
OK - @fribse and @dd871 - I uploaded newer versions of the main .py and the GUI .py file (I also renamed them to the correct "Neewer", so you'll need to download both of them again), but this commit fixes the CCT calculation issue, and integrates with bleak to control the lights. You need to hit "Scan" first, and wait a few seconds - the list of Neewer lights will show in the dropdown menu. To send a command, click on the light you want to send it to, then hit "Send" ~
Thanks for the update @taburineagle, the new byte array worked perfect when sending it from my phone or via Python from my Pi.
Unfortunately, I was not able to fully test the new GUI version, as my laptop Bluetooth is playing up and refuses to connect properly to any device at all (it does scan correctly though and automatically selects the light in the dropdown). I also can't run it on my Pi (where Bluetooth is working fine) as it is a headless system.
@dd871 - Hmm, that's odd - although I'm not sure if the laptop's bluetooth issue is a program/bleak issue, or related to that computer :) I'm in the exact same boat with the Pi situation - I have several RPis, but they're all doing something (most in the field), and the only real "test" Pi I have available is a Pi Zero W... which I suppose I could flash with a Pi OS GUI to test, although that would probably take a slight while to start up!
OK, STATUS UPDATE: (because I haven't added a commit in a few days, because I'm tweaking a lot) - I've re-written the light/Bleak calls to use their own thread now. I'm going through the entire codebase to make sure I have everything accounted for, everything is 100% thread-safe, etc. before I add a new commit. Light detection works well with several lights, sending commands to the light is "live" in real-time (as responsive as the Neewer app is), and control of multiple lights simultaneously is also doable. I may re-write the "combo box" at the top to be a list view instead, and then read which rows are currently selected as you move the slider (to choose which lights to send commands to at the current moment) so you could feasibly control as few as one, and as many as 4, 5, 10, etc. at the same time, if you have that many! I've tested it on both Windows and Ubuntu and it works well on both - still need to test on MacOS, and I also still plan on writing a separate command-line based headless Pi version, that would accept a command like:
(light MAC address) (mode) (specifications) for example, AA:BB:CC:DD:EE:FF CCT 5400K 64
I'm working on this all in my spare time though, so I'm trying to get this "live" ASAP when I get a spare moment here and there :)
Sounds amazing - especially the group feature, as I have two sets of the lights myself!
I did a little hack, using your code as a template and remodelling it to work from a command line (just so that I can use it from my Pi). But I suck at coding, hence would not be a good contribution. Still, it kinda works, using commands like:
python Neewer.py --macAddress="XX:ZZ:AA" --brightness=10 --temperature=4000
I will keep using this until you have some time to work on your version of the command line implementation, which I am certain will be far superior to my own.
Sounds exciting. I wish I had 5 or 10 Neewer lights :-D But even for my two, it is going to be a great addition. I've gotten hold of a BT dongle now for the PC, so I'll be able to try it from there, I have BT in the company laptop of course, but I'm not allowed to install 'third party' software so I'll defer from that. I'm also going to try and set it up on my currently only not used rpi (4).
So far no luck on the RPi, didn't know it needed a GUI, so have to redo that, the windows didn't succeed either, it doesn't find anything when scanning, it could be because the dongle I found is a BT adapter from 2005, so very old BT protocol :-o
Ah, got you - yeah, so far it is a GUI-only application, but I do want to make a CLI version too (that was my initial goal, because I want to use a headless RPi to control the lights as well) - writing the CLI is actually the eas(ier) part, but I want to get the GUI sorted out first. I don't know exactly which version of Bluetooth the lights use, but they do need BTLE (low energy), so yeah, that older dongle probably won't work :| I also needed a dongle, as my Windows PC doesn't have Bluetooth natively either - I got a somewhat cheap D-Link dongle, and it works great! The distance isn't that great (it is a cheap dongle), but for testing, that's not a huge deal. Here's what the GUI looks like so far - it's definitely a lot beefier than it was before!
Looks great, I'm going to pick up a new one tomorrow, can't wait to get it tested here :-)
Ah, excellent! I hope to push a new commit soon (possibly tomorrow) - just making sure I have all of my I's dotted and T's crossed before I push it! ;)
OK, I've pushed the latest commit!
@dd871 - I just noticed your comment about the command-line hack (GitHub didn't notify me of the comment, so I just noticed it scrolling by đ) - that looks like a great way to specify the settings! I just pushed the latest GUI version, let me take a look into implementing some sort of CLI version next.
I finally got a working bluetooth, the dongles I got hold of just shows up as 'Bluetooth Radio', and doesn't show the Bluetooth icon at all. So I got hold of a spare laptop at work with built-in BT, and that worked. I can see the light, it finds Neewer-SNL600, and the MAC address, it shows Linked: Yes, and then Waiting to send. But it doesn't react on brightness or colour temperature, it just remains turned off. I can connect from the app on the phone, and that works (there it is shown as SNL660-532
Hmm... when you say "turned off", do you mean the light itself is turned off? Like it has power, Bluetooth is connected, but it's technically "off" (or in power saving mode)? I have found if you send signals to a light that's "off" (as far as the light is concerned), it won't receive any parameters until you turn it "on" (in the Neweer app, it's the little button on the front icon, before you actually get to the parameters to adjust) - I haven't implemented power on/off in my app yet, but it shouldn't be too hard to implement. If you turn the light completely off though, close the app, turn it on normally (so it's illuminated) and then try to use the program, does it respond then?
This is what my SL-80 looks like in that mode - the light is "powered on", and the program is linked to it, but the light is in "POWER OFF" mode, so it can't actually receive any signals from the program. Once I turn it on, it responds to the color/brightness dials.
Also, you can't connect the light to more than one Bluetooth controller at the same time, so if the Neewer app is connected to the light, my program can't connect to it, and vice versa.
The light is powered, but led's are turned off in the app. So I turned them on in the app, and then closed the bluetooth on the phone. Then I can connect to the light in your python program, it says Linked The light looks like this: But it doesn't react to it in the python program.
Hmm - that's so strange. It does see and link to the light, so the connection definitely works, so Bleak is working - I doubt it, but maybe the control for that light is in another characteristic? I was wondering if the channel being set to 0 made a difference, but I tried that with my SL-80 (on channel 0) and it still responds to commands. Just to play Devil's advocate, if you turn everything off - the light, close out of the app on the phone completely, and close the Python program - then turn the light on, turn the LEDs on (I'm not really sure about that one, both of my lights come on illuminated as soon as I turn the power on, but I'm not using this specific model), make sure the app on the phone is closed completely (the Bluetooth icon on the light should be blinking to show there's no connection) and then start the Python program up and re-link it (so the Bluetooth icon on the light itself should be solid now), does the light respond then?
Also, are you using Android or iOS for the phone's app control?
OH! Try this too - ha, you may already have, but on just testing it myself I found myself forgetting to - you need to select the light in the table first, then try dragging the sliders. The way I programmed the Python script was it sends commands to whichever lights are selected in the table view (so if you have none selected, it sends to none - if you have 4 selected, it sends to all 4) - I just noticed on a quick dry test I was having the same issue as you, but then realized I didn't select the light to send the data to first - make sure it's highlighted first, then try moving the sliders.
If the data from the console looks like the section below in rapid-fire when you try to send data to the light, that's most likely the culprit, because it has a light it can control, but as far as it's concerned, it's not actually set to control any.
[18:31:32] - Leaving send mode and going back to background thread [18:31:32] - Background Thread Running [18:31:32] - Going into send mode [18:31:32] - Leaving send mode and going back to background thread [18:31:32] - Background Thread Running [18:31:33] - Going into send mode [18:31:33] - Leaving send mode and going back to background thread [18:31:33] - Background Thread Running [18:31:33] - Going into send mode [18:31:33] - Leaving send mode and going back to background thread
It is really odd. Ok, so I finally got the BT adapter to work in the desktop computer. But that won't connect, I think it might be because it's on the back of the computer, and there's a big metal thing in the way (the case). So I'm still testing on the laptop. I've tried the thing with turning off the light and turning it back on (also previously), and it does turn on the LED's when I do so. The app is running on Android, and when I disconnect from that, I turn off the bluetooth in the phone, just to be on the safe side. I didn't know I had to click on the light, when I do it shows a '1' next to it, but it still doesn't react. The app on the phone is running in CCT mode (it's a white temperature light, not a color light).
I just tried with a tp-link BT adapter, instead of the dezen. That shows the neewer light in windows if I search for it there (didn't connect to it there). bleak also finds it, but can't connect to it, and can't unlink from it???
Ok, I turned the light off / on and changed it to channel 1, then I can connect to it from the app. But I still do not see any reaction from it:
D:\neewer>py NeewerLite-Python.py
[09:13:58] - Background Thread Running
[09:13:58] - Searching for new lights
[09:14:03] - Attempting to link to light 0
[09:14:12] - Successfully linked to light 0
[09:14:12] - Background Thread Running
[09:14:13] - Background Thread Running
[09:14:13] - Background Thread Running
[09:14:13] - Background Thread Running
[09:14:13] - Background Thread Running
[09:14:14] - Background Thread Running
[09:14:14] - Background Thread Running
[09:14:14] - Background Thread Running
[09:14:14] - Background Thread Running
[09:14:15] - Background Thread Running
[09:14:15] - Background Thread Running
[09:14:15] - Background Thread Running
[09:14:15] - Background Thread Running
[09:14:16] - Background Thread Running
[09:14:16] - Going into send mode
[09:14:17] - Leaving send mode and going back to background thread
[09:14:17] - Background Thread Running
[09:14:17] - Background Thread Running
[09:14:18] - Background Thread Running
[09:14:18] - Background Thread Running
[09:14:18] - Background Thread Running
[09:14:18] - Background Thread Running
[09:14:19] - Background Thread Running
[09:14:19] - Background Thread Running
[09:14:19] - Background Thread Running
[09:14:19] - Going into send mode
[09:14:21] - Leaving send mode and going back to background thread
[09:14:21] - Background Thread Running
[09:14:21] - Background Thread Running
[09:14:21] - Background Thread Running
[09:14:22] - Background Thread Running
[09:14:22] - Background Thread Running
[09:14:22] - Background Thread Running
[09:14:22] - Background Thread Running
[09:14:23] - Background Thread Running
[09:14:23] - Background Thread Running
[09:14:23] - Background Thread Running
[09:14:23] - Background Thread Running
[09:14:24] - Background Thread Running
[09:14:24] - Background Thread Running
[09:14:24] - Background Thread Running
[09:14:24] - Going into send mode
[09:14:26] - Leaving send mode and going back to background thread
[09:14:26] - Background Thread Running
[09:14:26] - Background Thread Running
[09:14:27] - Background Thread Running
[09:14:27] - Background Thread Running
[09:14:27] - Background Thread Running
[09:14:27] - Going into send mode
[09:14:29] - Leaving send mode and going back to background thread
[09:14:29] - Background Thread Running
[09:14:29] - Background Thread Running
[09:14:30] - Going into send mode
[09:14:32] - Leaving send mode and going back to background thread
[09:14:32] - Background Thread Running
[09:14:32] - Background Thread Running
[09:14:33] - Background Thread Running
[09:14:33] - Background Thread Running
[09:14:33] - Background Thread Running
[09:14:33] - Background Thread Running
[09:14:34] - Unlinking from light #0 (1 of 1 lights to unlink)
[09:14:34] - Stopping the background thread
[09:14:41] - Successfully unlinked from light 0
[09:14:41] - Closing the program NOW
Hmm, very interesting - I actually didn't know there was a CCT only version Neewer light (both of the lights I have are CCT/HSL lights) - OK, apologies if I keep repeating myself, I'm just trying to understand on my end without actually seeing it for myself :) there might be something going on with that model that I'm not 100% understanding - maybe the actual command set is different.
The log you showed above doesn't show any strange errors (like unable to communicate, can't find characteristic, etc.), that's why I wonder if something different is going on with that particular model...
Last log from desktop didn't connect:
[11:11:31] - Background Thread Running
[11:11:31] - Background Thread Running
[11:11:31] - Searching for new lights
[11:11:36] - Attempting to link to light 0
[11:11:43] - Error linking to light 0
Could not get GATT services: Unreachable
[11:11:43] - Background Thread Running
...
[11:11:51] - Background Thread Running
[11:11:51] - Unlinking from light #0 (1 of 1 lights to unlink)
[11:11:51] - Successfully unlinked from light 0
[11:11:51] - Closing the program NOW
[11:11:51] - Stopping the background thread
...
[11:14:44] - Searching for new lights
[11:14:49] - Attempting to link to light 0
[11:14:59] - Error linking to light 0
Could it be because this is CCT only, and even though it is marked cct in the app view, it is actually sent as hsl? I've also tried the HSL tab, and the animation tab, and neither of them does anything.
I just tried switching the light to channel 0 again, and now the desktop can connect to it ??
Ha! The plot thickens - honestly the channel shouldn't affect how the program connects to it, but that's interesting too đ I'm curious now, because 0x78 0x87 is definitely CCT mode, 0x78 0x86 is HSL - so, for all intents and purposes it should be working - although I was wondering if because that light is CCT only, maybe it uses a modified (or more simple) command set that the "bigger" HSL/CCT Neewer lights use. The HSL/CCT lights have 0x86 for HSL, 0x87 for CCT, and 0x88 for scene mode. I also noticed when going to the product page for the light you're using, the app is a little different than the "big light" app has. @xeefo's program also says it was tested with a "660 RGB" light, but that's the kind I have too (660PRO HSL/CCT/etc.) - I'd almost ask Neewer for a light to test, but I doubt "I'm making an app to do what yours does" wouldn't really be a good way to break the ice đ¤Ŗ
Have two 660s and haven't been able to get them to be found when scanning. They work on my android phone. I disabled bluetooth on my phone to make sure they weren't interfering with the scan. Bluetooth pairing light on the 660s is flashing.
Windows 10. Will try another pc and some bluetooth dongles to see if there is any change. I'm really interested in getting this working. Is there any logging to check ? New to bleak so will continue to troubleshoot. Thanks for putting this together!
You're welcome! Ha, I wish it wasn't giving so many people issues off the front-end, but that's how early projects go, that's why there's beta testing đ What I'm using for testing on my end is:
All of these combinations have worked for me, with both lights, on both OSs, with a few minor hiccups (I do have an "error connecting" sometimes, but re-connecting them a 2nd time seems to work) - I'm not sure which version of BT is required, but I know it needs to be able to see/use BTLE (Bluetooth Low Energy) devices, so if your BT setup doesn't support BTLE, it won't work (although most do)...
The way I have the program running at the moment is just to print everything (all the log events) directly to the console, so if there are any error messages, they'll show up there - it might be more helpful to output that to a .txt file too though, so I'll look into doing that too in the future.
@fribse - the reason I asked earlier if you were on iOS or Android is there is an app I use (nRF Connect) to see what characteristics the lights connect to on their Bluetooth connections. The app for Android is here - if you wouldn't mind, would it be possible to download that app, open it to the Neewer light you're using and then click on the 2nd tab to show the characteristics unique to that light? I'm curious if they're different on that one compared to the one I'm using (the characteristic I'm using to send data using Bleak on my lights is 69400002-B5A3-F393-E0A9-E50E24DCCA99) - when I write to that value using either the Python program or nRF Connect, it accepts commands through this characteristic.
Zach, Thanks for the FAST reply. I will pick up that bluetooth dongle. I'm running Windows 10 Pro, python 3.9.5, Bleak 0.12.1, a motherboard based (MSI Meg Creation x399) Intel bluetooth 5 adapter on a 2990wx. I have the 660 Pros as well. Will also give it a try on a few other systems I have, although it's always maddening when you want it to work on a particular system. Thanks again. Very glad you did this work. I didn't want to have to pick up a Mac to use the MacOS based version. Will let you know if that dongle changes anything or if the other systems work. Mark
-----------------------------------------From: "Zach Glenwright"
To: "taburineagle/NeewerLite-Python" Cc: "gnerf", "Comment" Sent: Tuesday October 5 2021 10:32:38AM Subject: Re: [taburineagle/NeewerLite-Python] Testing? (#1)
You're welcome! Ha, I wish it wasn't giving so many people issues off
the front-end, but that's how early projects go, that's why there's beta testing đ What I'm using for testing on my end is:
* Windows 10 Pro for Workstations (although that shouldn't matter)
version 20H2
A Neewer RGB660 PRO HSL/CCT/Scene light
All of these combinations have worked for me, with both lights, on both OSs, with a few minor hiccups (I do have an "error connecting" sometimes, but re-connecting them a 2nd time seems to work) - I'm not sure which version of BT is required, but I know it needs to be able to see/use BTLE (Bluetooth Low Energy) devices, so if your BT setup doesn't support BTLE, it won't work (although most do)...
The way I have the program running at the moment is just to print everything (all the log events) directly to the console, so if there are any error messages, they'll show up there - it might be more helpful to output that to a .txt file too though.
â You are receiving this because you commented. Reply to this email directly, view it on GitHub [2], or unsubscribe [3]. Triage notifications on the go with GitHub Mobile for iOS [4] or Android [5].
[1] https://www.amazon.com/dp/B07V1SZCY6?psc=1&ref=ppx_yo2_dt_b_product_details [2] https://github.com/taburineagle/NeewerLite-Python/issues/1#issuecomment-934468054 [3] https://github.com/notifications/unsubscribe-auth/AEZGUDLMN3BOXYAGPWPKKZDUFMEAJANCNFSM5EQTUG4A [4] https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 [5] https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub
Just ran this on one of my lights and received - 69400002-B5A3-F393-E0A9-E50E24DCCA99
-----------------------------------------From: "Zach Glenwright"
To: "taburineagle/NeewerLite-Python" Cc: "gnerf", "Comment" Sent: Tuesday October 5 2021 10:51:44AM Subject: Re: [taburineagle/NeewerLite-Python] Testing? (#1)
@fribse [1] - the reason I asked earlier if you were on iOS or
Android is there is an app I use (nRF Connect) to see what characteristics the lights connect to on their Bluetooth connections. The app for Android is here [2] - if you wouldn't mind, would it be possible to download that app, open it to the Neewer light you're using and then click on the 2nd tab to show the characteristics unique to that light? I'm curious if they're different on that one compared to the one I'm using (the characteristic I'm using to send data using Bleak on my lights is 69400002-B5A3-F393-E0A9-E50E24DCCA99) - when I write to that value using either the Python program or nRF Connect, it accepts commands through this characteristic.
[3]
â
You are receiving this because you commented. Reply to this email directly, view it on GitHub [4], or unsubscribe [5]. Triage notifications on the go with GitHub Mobile for iOS [6] or Android [7].
[1] https://github.com/fribse [2] https://play.google.com/store/apps/details?id=no.nordicsemi.android.mcp&hl=en_US&gl=US [3] https://user-images.githubusercontent.com/18430526/136047211-07c53358-2dbd-4e58-bc36-4b545528dcee.jpg [4] https://github.com/taburineagle/NeewerLite-Python/issues/1#issuecomment-934483471 [5] https://github.com/notifications/unsubscribe-auth/AEZGUDNIY662MNHA2KHCPQ3UFMGH7ANCNFSM5EQTUG4A [6] https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 [7] https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub
Ha, you're welcome - I have weird hours, sometimes I'm available in the middle of the day, sometimes the middle of the night - got lucky that time :) In which way did you receive that message? Did it say it can't connect to something? 69400002-B5A3-F393-E0A9-E50E24DCCA99 is the characteristic the light looks for when you send data its way.
Ah, sorry. The 69400002-B5A3-F393-E0A9-E50E24DCCA99 was information from the nRF connect application through my phone.
The python app just says Searching for new lights, pauses, and starts back up with Background thread running. No other messages. Dongle is on its way.
Ohhh, got you, got you - yeah, that's definitely the same characteristic I'm writing to within the Python program. If you wouldn't mind, could you click on the arrow next to that characteristic and tell it to send this string as a ByteArray (which is the default option) - 78870264298E - it should change the light to 4100K @ 100 brightness.
Sending that bytestring worked - 4100k @ 100%
Beautiful, beautiful - that should work through the Python script too, when the Bluetooth dongle arrives. Do you have a 660 RGB light (where you can turn the LEDs any color), or is yours just a CCT (just various shades of white balance) light?
Three of the 660 RGBs.
If you have an RGB model, sending 788604F0006464BA should turn it blue @ 100% brightness & 100% saturation.
Got you - I was curious, because @fribse has a 660 as well, but his is only CCT (white balance) controllable, and I wasn't sure if those lights possibly used a different control scheme (like a different set of prefix commands) to adjust those settings.
Confirmed. Bright saturated blue. Switches to HSI mode - Hue of 240, S of A0.
Ah, I see you already mentioned 660 PRO in your other message - ha, I missed that little detail đ¤Ŗ Yeah, that's what I'm using as well, only I just have 1 of those and a small SL-80 on-cam light. Nice, that's definitely working how it should!
Looking forward to figuring out an integration path with a Stream Deck once my blue tooth connectivity works.
That part I'm not 100% sure how @keefo is doing on his app - I'm guessing (although I need to analyze that section of code more closely) that his app is running some sort of tcp server and that's what the Streamdeck is connecting to? Ha, I also don't know how Streamdecks function, so I could be way off on that one.
Hi @gnerf @taburineagle
The Stream Deck is pretty flexible to use. It supports to run any app and script.
In my home, I write 3 little bash scripts, and link 3 Stream Deck buttons with 3 scripts. The content of the script are as simple as this:
#!/bin/bash
open neewerlite://turnOnLight
#!/bin/bash
open neewerlite://turnOffLight
#!/bin/bash
open neewerlite://scanLight
In macOS, I have the Neewerlite app registered to the schema neewerlite
. Every time I open this schema, macOS will automatically launch my app and delegate this command into the neewerlite app. This is the same concept as you run this
open https://www.google.com
, macOS will know to use a default browser open the https schema.
https://developer.apple.com/documentation/bundleresources/information_property_list/cfbundleurltypes
Got you - very cool, I was curious where the Bash scripting came in (because I saw on your repo that there was "0.9% Shell" in there, I thought the scripting was a compilation script somewhere, but that's a cool use of it). I'm not sure for cross-compatibility how that would work though, because Windows needs a registry edit to set up a custom url schema (at least AFAIK), and I'm not sure how Ubuntu handles them - I was looking at using zmq at one point through Python, so maybe something could be made of that - if the Streamdeck can send tcp:// commands, or the scripts could, maybe that's one possible way to implement that - zmq uses other schemas other than tcp as well, but that's the one I was looking at so far.
@fribse - I added the ability to turn the light on and off from the ANIMATION MODE/POWER tab with my latest commit - it'll be interesting to see if the 2-tone 660 allows that command to go through.
That TPlink BT dongle resolved my connection issue. Will play when I get some spare time. Thanks!
Ah, excellent! Everything should be good to go then - you're welcome!
Hi Zach
Looking good, very exciting progress, good job! So let me know when I should start testing this. With python it should be able to run on a raspberry pi, right? It would be supercool to have it in micropython as well, for the esp32 chip :-) But alas, I have no programming abilities in that regard âšī¸