getBytes returns an array of byte primitives so what you are seeing when you print it is the memory address of the start of that array. You probably want something along the lines of:
val StringBuilder bts = new StringBuilder
bts.append("Air Quality:")
Air_Quality.state.toString.getBytes.forEach[b | bts.append(Integer.toHexString(b)]
logInfo("Testing", bts.toString)
Neither Java nor the Rules DSL makes dealing with raw binary data obvious nor easy.
Usual disclaimer, I just typed in the above, there may be typos.