Hi. I am using Ruuvi tags in combination with a Minew gateway and openHAB.
Getting this string in json from Minew Gateway:
So how can I parse this in Java?
I have tried with the “GitHub - Scrin/ruuvitag-common-java: Common Java utility library for RuuviTag related things, ie. RuuviTag raw data parsing”
and also splitting like DATA = DATA.split(“FF9904”); without success.
Probably an issue with RUUVI_COMPANY_IDENTIFIER, any suggestions?
The library you linked expects the manufacturer specific data payload (starting with ruuvi company identifier), which in your example is:
which means in your case you need to omit this part from the beginning:
A crude implementation could just be hardcoded to discard that from the beginning since its very unlikely to change, but if you want to “properly parse it” yourself, you need to parse the advertisement structs from that data and look for the struct containing the manufacturer specific data.
Each advertisement struct starts with a length byte followed by a struct type byte, followed by the data specific to that struct type. In your case you seem to have two structs (which is typical) and the bytes in your case are:
02 Struct length (after the length byte), in this case two bytes
01 Struct type, 01 means flags. You are not interested in this so you can discard this struct entirely
06 A byte containing the flags, you can ignore this (note: this is the 2nd byte after the “struct length” byte so the first struct ends here)
1B Struct length (again, after this length byte), in this case 0x1B = 27 bytes
FF Struct type, FF means manufacturer specific data, so this struct contains the data you want
- remaining bytes are the manufacturer specific data payload, starting with the ruuvi company identifier of 9904. This is what you feed to the library.
Do note that the library expects a raw
byte so you need to convert the hex string into a byte array (not just the bytes of the utf-8 string you have), for example like this.
Thank You so Much Saved many hours!