     Serial.println(humidity);
 }
 
-boolean checkSumMatch() {
-
-    //Sum first 8 tetrads
+int isCheckSumMatch() {
+
+    //Sum first 8 nibbles
     int sum = 0;
     for (byte i = 0; i < DATA_ARRAY_SIZE - 1; i++) {
-        sum += getLastFourBitsReversed(data[i]);
-    }
+        sum += data[i];
+    }
+
+    //clear higher bits
+    sum &= 15;
 
     //returns true if calculated check sum matches received
-    return getLastFourBitsReversed(sum) == data[DATA_ARRAY_SIZE - 1];
+    return sum == data[DATA_ARRAY_SIZE - 1];
+}
+
+byte getSensorChannel() {
+    //Channel is bits B0, B1 in T2 nibble
+    //Since we store T2 in reversed order
+    //we have to get 3,4 bits ot data[1] and reverse them
+    return ((data[1] & 1) << 1) | ((data[1] & 2) >> 1);
+}
+
+byte getPowerUUID() {
+    //we do not reverse power uuid since value is still uniq
+    return (data[0] << 2) | ((data[1] & 12) >> 2);
+}
+
+byte getPowerStatus() {
+    //Power or battery status is C0 bit in T3 nibble
+    //since in data array we wrote T3 in reversed order
+    //it will be the first bit in data[2]
+    return data[2] & 1;
 }
 
 int getTemperature() {
     int temperature = 0;
 
-    temperature = (((int)getLastFourBitsReversed(data[5]) << 8)
-                   | ((int)getLastFourBitsReversed(data[4]) << 4)
-                   | (int)getLastFourBitsReversed(data[3]));
+    //Temperature is stored in T4,T5,T6 nibbles
+    //lowest nibble - first
+    //since we already reversed bits order in these nibbles
+    //all we have to do is to reverse nibbles order
+    temperature = (((int)data[5] << 8) | ((int)data[4] << 4) | (int)data[3]);
 
     if ((data[5] & 1) == 1) {
         //negative number, use two's compliment conversion
         temperature = ~temperature + 1;
 
-        //clear higher bits
-        temperature = temperature & 4095;
+        //clear higher bits and convert to negative
+        temperature = -1 * (temperature & 4095);
     }
 
     return temperature;

//          1110|1011 = 59% because 101001 (inverted all bits and add 1) = 41, and 100 - 41 = 59
//
// I0-I3 - 4 check sum which is calculated as a sum of less significant bits
//            of check sum of the tetrads T1-T8 written backwards.
//            for example let's look at the example message:
//            1011|1100|0100|0000|1111|0000|0010|1111|0010
//            sum of the tetrad T1-T8 where each bit written backwards = 110100,
//            lets take last 4 bits and wrote them backward:
//            0010 which is equal to T9 tetrad

volatile byte data[DATA_ARRAY_SIZE] = {0, 0, 0, 0, 0, 0, 0, 0, 0};

void setup() {

void printDataArray() {
    Serial.println("==== Sensor data captured ===");
    
    byte sensorChannel = getSensorChannel();
    byte powerOnUUID = getPowerUUID();
    byte powerState = getPowerStatus();
    float temperature = (float)getTemperature() / 10;
    byte humidity = getHumidity();

    Serial.print("Channel: ");
    Serial.println(sensorChannel);

    Serial.print("Power UUID: ");
    Serial.println(powerOnUUID);
