Hi all. Sorry in advance for the huge post.
I recently got one of those Blisslights Star Projectors (the 2.0 version with Bluetooth) and I’m trying to reverse engineer the commands that their official app sends to the device so I can hopefully integrate it into Home Assistant somehow… As of right now the device does not remember its last state while on, so my only current way to integrate it into HA (a smart plug) allows essentially only one light mode, the default when it turns on.
I followed this wonderful guide to get myself started trying to figure out what the commands being sent from the Blisslights app to the projector are, but I think I may have exhausted my abilities at this point.
Following the guide, I found the device on the nRF app, found 4 characteristics used to communicate with the device:
-
1911
Notifications -
1912
Commands -
1913
OTA (Assuming over the air update stuff) -
1914
Pair
I sniffed some bluetooth packets using my Android phone while sending some commands through the app, and the order of notable events essentially was:
- Phone sends write request
0cc4c38bb5649aae797759a5daece26f02
(this changes every time, and there’s zero pattern for each command) through1914
, to pair the device I’m assuming. - Projector sends reply (WireShark doesn’t say what it is)
- Phone sends a read request through
1914
- Projector sends back
0da3fe0961edf42718cc2967034afe3748
(again, no pattern I can see between different times) - Phone sends
01
request to projector through1911
- Projector sends back
c8400d0000863cc4199b7cbc12bf635628b96926
- Phone sends command
c7c5207b64ca9fe414e210c249a8da606a863ef5
to change lights to stars only through1912
Looking through more logs, it’s clear that the app sometimes sends the 01
write request through 1911
prior to sending a command through 1912
, but also seems to have the capability to send multiple commands through 1912
after one another.
Here is a list of commands that I sent (alternating between Nebula only and Stars only):
Value: c7c5207b64ca9fe414e210c249a8da606a863ef5
Value: c8c5204961239e7c67c70045b40acc799edb6625
Value: c9c52013faf771b29ef4a9353f950820b32acd07
Value: cac52026b5d07933491a23bd6b701de747c84f48
Value: cbc5208c56ab84173ac338d4a85e7be6b1f5a46a
Value: ccc520ed45b4a35ed54a7b37586d83805009f975
Value: cdc520f6ea193cb83cd19e5674cd2e0dc4a726e4
Value: cec52068def24e42073b55cbda8670d0fc600eae
Value: cfc5209d4305920e223c6b706816d2791a7d5270
Value: d0c5203ec99c4ef2f921413774bff5bccc905c45
Value: d1c5203d12cc74466fcc5de3ae23b66f3622b390
Value: d2c520dd124ab3885620bfe4d5e4b341eaf8f249
Value: d3c52094d43160b6c61f57f10ec5920f471edba0
Value: d4c52011765f7a7b727c068046d7a2dbc27e2947
Value: d5c520ff5aeb8fa08f78cf22cc4e77729e9dbe77
Value: d6c5205edc055bbb3fbad78c3b12e9a26767c6e1
Value: 87159869260c326c66a8073abb8e75a1d403a21f
Value: 881598b6a79412cc660045fa9f676921e99a5572
Value: 891598419aacaba126ccc59c3f943afb7f6a17e9
Value: 8a1598b9b62f598d0e6869a740c2b74494aa9e37
Value: 8b1598e15e347c2d1ad77cca5609eddaf394cdcb
Value: 8c15981f22dde086ea2bd4c666b6f9d860531c96
Value: 8d1598c1460c1ae3423d84c135df7962c7765965
Unfortunately, these commands seem to have no pattern whatsoever, which makes it rather difficult to reverse engineer them. I can tell the first two digits are incrementing each command, and the next 4 digits after that always stay the same (unless I log out and in, then they change). Other than that, zero patterns I can see.
A couple of other notes:
- I’ve tried simply writing all those commands into
1912
to no avail - I’ve tried recreating every step I laid out above to no avail
- When I send
01
to1911
through the nRF app, I get a response only if I’ve already “paired” the device by sending that same long string of digits to1914
in step 1. Although the actual letters/numbers always change, I can still use that one from above to get a response every time. If I don’t do that step, I get no response back when sending01
to1911
. - If I open the Blisslights app and connect, then switch to the nRF app, the app will already be connected to the projector and I won’t need to do step 1, I will get a response by sending
01
to1911
every time.
The only way I ever managed to change the lights successfully using the nRF app was by doing step 5 and step 7 only. I am thinking this worked because I switched from the Blisslights app right into the nRF app, and thus didn’t need to do step 1 as my last note bullet says. The nRF log said I received a response back when sending 01
to 1911
. Unfortunately, I can no longer repeat it - it only worked once for a couple of commands and never again.
I am thinking maybe the 1912
commands are encrypted or contain some code that expires, and maybe that’s why I’m not able to send them anymore? My knowledge of this stuff is very slim, so please excuse my ignorance here, and please excuse me if this isn’t the right forum for this, I’m not really sure where else to ask. Thanks in advance!