theengs / decoder

Efficient, portable and lightweight library for Internet of Things payload decoding.
https://decoder.theengs.io
GNU General Public License v3.0
123 stars 41 forks source link

New Decoder for Fluval Aquarium Lights #308

Closed KSumwalt closed 1 year ago

KSumwalt commented 1 year ago

Looking to get a decoder for a Fluval Plant Nano 3.0 aquarium light. I suspect this would work for their other Plant and Marine lights as well.

I have found the following from the unit I have:

I am willing to do some leg work but don't know what I need to do beyond this step.

First Client Item:

Screenshot_20230312-163848

Second Client Item:

Screenshot_20230312-163907

Screenshot_20230312-163927

Third Client Item:

Screenshot_20230312-163945 Screenshot_20230313-104503

Server Items:

Screenshot_20230312-164440

DigiH commented 1 year ago

Hi again @KSumwalt,

Thanks for the additional info on your Fluval Plant Nano 3.0 aquarium light.

The manufacturerdata advertising playload from MQTTExplorer is great like that

{"id":"44:A6:E5:72:B3:C6","mac_type":0,"name":"Nano5Gallon","manufacturerdata":"30313532303130330000000000000000000000000000","rssi":-82,"txpower":-97}

It being the a freely broadcast advertisement, where we can see if it changes with different states of the Nano5Gallon, so as to try and see if and how this information is encoded in the manufacturerdata.

Now you would need to supply more readings like the above, but with the Nano5Gallon having different states to report with each MQTT reading. The easiest to start with would be Nano5Gallon ON -> reading, then Nano5Gallon OFF -> reading.

The nRFConnect screenshots are great, too, but apart from service 1000 with characteristic 1004 giving seemingly the same result as the advertised manufacturerdata, and the obviously named characteristics like Software Revision String etc., it doesn't show what the others might possibly indicate. Any of these service/chars with arrow down (READ) and arrow up (WRITE) could be accessed, i.e. read or written to with the OpenMQTTGateway READ/WRITE commands.

For the purpose of seeing if it is possible to integrate a decoder here into Theengs Decoder though, let's stick to the MQTT broadcast messages, and see if we can get the different states from the manufacturerdata :)

KSumwalt commented 1 year ago

The MQTT Explorer data does not change outside of the RSSI and TXPower values. I unplugged the light and plugged it back in and the data was the same. I connected the phone app and this data stopped sending. So I believe it is just advertisement data as the listing in MQTT Explorer only updates when nothing is connected.

In order to get the light to resume the schedule with the current time, I would need to connect to it via the phone app. Once in the App I need to actually "browse" to that light to get the internal time reset. Meaning if I had 3 lights and a power outage, I need to browse to each one. So I first opened nRF Connect and connected to the light. On a second phone I then opened the Fluval app. I could not connect to the light (as likely expected). The light was still off even though by the schedule it should be on. This is because neither the phone app nor other source has sent it a corrected time value. I disconnected nRF Connect from the light and then connected the phone app. As soon as the phone app is connected to the light the light resumes the saved schedule. Meaning if the light should be on, it turns on at whatever levels are appropriate for that time.

All this to say that I think I need to read the data going between the phone app and the unit. I do know that the app downloads the scheduled settings from the light. I have changed it on one phone, disconnected, then connected the second and seen the change. As soon as the phone app is connected to the light the light resumes the saved schedule. Meaning if the light should be on, it turns on at whatever levels are appropriate for that time.

DigiH commented 1 year ago

Shame about the advertising data not changing :( this means it won't be possible to include a state decoder into Theengs Decoder for the Fluval light.

It might still be interesting to see what and how the service/characteristics change depending on the light status. The facy that the scheduly doesn't seem to be uploaded to the light is a bit strange though, as it sounds from your description the schedule is only resumed once connected to the app again.

Apart from scanning the data going between the app and the light, it might still be interesting if you compare the above information from your screenshots with different states of the light, obviously when no connected with the app.

Sorry, I did not want to close the issue, a slip of my hand on the trackpad.

KSumwalt commented 1 year ago

The schedule is saved in the device and the app reads it from the device each time the app connects. What is not on the device is any persistent clock so that the device knows the time after a power failure.

DigiH commented 1 year ago

Closing as there is no advertising data broadcast containing relevant information for Decoder to use.