function Decode(fPort, data, variables) {
    if (fPort === 13) {
        return [
            {
                led_state: bytes[0] === 0 ? "Off" : "On",
                mtm_code_1: bytes[1],
                mtm_code_2: bytes[2],
                hw_code: bytes[3],
                battery_level: bytes[4] + "%",
                size_value: bytes[5],
                spot_cnt: bytes[6] + " blocks",
                spillage_level: bytes[7] + "%",
                top1_position: "X= " + bytes[8] % 10 + " Y= " + parseFloat(bytes[8] / 10).toFixed(0),
                top2_position: "X= " + bytes[9] % 10 + " Y= " + parseFloat(bytes[9] / 10).toFixed(0),
                top3_position: "X= " + bytes[10] % 10 + " Y= " + parseFloat(bytes[10] / 10).toFixed(0),
                top4_position: "X= " + bytes[11] % 10 + " Y= " + parseFloat(bytes[11] / 10).toFixed(0),
                min_temp: (bytes[12] + bytes[13] / 100) + "C",
                average_temp: (bytes[14] + bytes[15] / 100) + "C",
                max_temp: (bytes[16] + bytes[17] / 100) + "C",
                center_temp: (bytes[18] + bytes[19] / 100) + "C",
            }
        ]
    }
    else if (fPort === 14) {
        return [
            {
                led_state: (bytes[0] & 0x7f) === 0 ? "Off" : "On",
                battery_level: bytes[1] + "%",
            }
        ];
    }

    else if (fPort === 1) {

        if (bytes[0] === 0x56) {
            return [
                {
                    mtm_code_1: bytes[1],
                    mtm_code_2: bytes[2],
                    HW_Version: "HW:" + bytes[3],
                    SW_Version: "SW" + bytes[4] + ":" + bytes[5] + ":" + bytes[6] + ":" + bytes[7],
                }
            ];
        }
        else if (bytes[0] === 0x53) {
            return [
                {
                    mtm_code_1: bytes[1],
                    mtm_code_2: bytes[2],
                    sw_code: bytes[3],
                    hw_code: bytes[4],
                    battery_level: bytes[5] + "%",
                    size_value: bytes[6],
                }
            ];

        }

        if (bytes[0] === 0x59) {
            if (bytes[1] === 0x44) {
                return [
                    {
                        HB_interval: (bytes[2] - 0x30) * 10 + (bytes[3] - 0x30),
                        HB_interval_unit: String.fromCharCode(bytes[4]),
                    }
                ];
            }
        }
    }

};