-
Notifications
You must be signed in to change notification settings - Fork 15
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Decoding SLEquipmentConfigurationMessage #26
Comments
Quick-and-dirty first shot at interpreting circuit RPMs: https://gist.github.com/parnic/998f0b1d89a0fecc25df2dd1c1916c8e Example usage:
Feedback appreciated. |
This seems to work for me, i tweaked the code to be:
I get:
Which is correct |
Also of note byte0 = 64 for me, i only have one VS pump so maybe that is why ( maybe a sort of length field?) |
Interesting! The SLConfig log seems to deal with byte 0 like this, which seems nonsensical to me:
This could be a decompilation or deobfuscation bug. Either way, I'm not sure that byte is actually important for anything ( |
Hmmm, i looked at the code too and its unclear to me as well, it may not be important. Interestingly i could not find the current speed/gpm/power use on that message, however I did find another message called GETPUMPSTATUS (msg 12584) that seems to have the needed info and also contains the set RPMs per circuit, unfortunately this message is not used in the android app so I'm guessing as to the meaning of the data (i interpreted everything as uint32, that may be wrong for the first couple of bytes):
Hopefully the formatting is not confusing See this gist for my current work on decoding the data, if I can figure out more on this or the EquipmentConfigurationMesage i'll post more: |
Just a random thought, maybe a bit OT, could we use the SLEquipmentConfigurationMessage as a way to 'backup' our settings? Although most of the code dealing with its data is too complex for me to understand at the moment, it seems that the Android app sometimes edits values in memory and then sends it back to the controller, and looking at the field names it seems to be a pretty complete list of settings for the controller. |
Yeah that could work. I'm not sure how complete this data is either. My slconfig app somehow wiped the circuits on my first pump while I was messing with it, but since I had a dump of one of these messages I was able to restore it all. |
did some work on interpreting the valveDataArray, pretty much just ported the java code over and cleaned up some of the logic, TBH i'm not 100% sure what some of the checks are doing, but i do get appropriate data Testing Needs:
|
Also I was able to get the following info on SensorDataArray, MiscDataArray, DelayDataArray: SensorDataArray:
DelayDataArray:
MiscDataArray:
|
See PR #32 for implementation of above decoding. Still a lot of work to be done for the rest. |
Based on some digging I was doing around the list and number of pumps, I believe that value of 64 indicates an IntelliFlo VSF pump. 0 is no pump, 128 is VS and 6 is VF. I just opened a case about getNumPumps() as it returns 8 pumps for me when I only have 1. By using byte0 of each 45 byte pump record in the FlowDataArray, you can determine if there really is a pump there or not. I added a 2nd pump in SLConfig to test even though I don't have a 2nd pump and the 2nd pump record started reporting its pump type (per the values I mentioned above) in byte0. No idea why they report different values for pump type in the FlowDataArray bytes vs. what you get in the pumpstatus message but I'm pretty sure of the mapping. If your one pump is an IntelliFlo VSF (like mine) you should see 64 in that first byte of the first record. |
@mikemucc @bshep @tomblevins
Figured I'd go ahead and make an issue for decoding this thing so nobody's duplicating work.
As a reminder, most of this is coming from decompiling the slconfig app with jadx + experimentation.
versionDataArray
can be turned into a version integer like so:(this.versionDataArray[0] * 1000) + (this.versionDataArray[1])
controllerData
's top 2 bits indicate how many "slave" devices there are (which I'm calling "secondary" devices):(this.controllerData & 0x11000000) >> 6
. don't know about the rest of the bits (my controller returns a value of2
for this)flowDataArray
is where I've found the most interesting info so far. This contains information for up to 8 pumps worth of flow data. 45 bits are reserved for each pump and 24 of those contain data for the up-to-8 circuits that each pump supports. I've decoded a given pump's bits like this so far (values are from my equipment):Circuit id's are decoded via
SLControllerConfigMessage
'sbodyArray
array,deviceId
property.The circuit and priming rpms are really strange with the upper and lower bits separated in the array. Valid values for RPMs is 400 - 3450 with the default value being 1000 (upper 8 bits = 3, lower 8 bits = 232).
I'm having trouble reconciling this information with what I'm seeing in the SLConfig code, though.
PageIntelliFloPriming
andPageIntelliFloFiltering
are both doing things with the flow data array, but the indices they're using don't match up quite right with what I'm seeing from my equipment. Still working on all this.The text was updated successfully, but these errors were encountered: